题解 | #二叉树的前序遍历#

二叉树的前序遍历

https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdio.h>
void preorder(struct TreeNode* cur, int*ret,int * returnSize) {
        if (cur == NULL) return;//先判断当前节点是否为空
     
        ret[*returnSize]=cur->val; 
         //  存储根节点
        (*returnSize)++;//存储组加一
        preorder(cur->left, ret,returnSize);  // 左递归
        preorder(cur->right, ret,returnSize); // 右递归
    }
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
       int *ret=(int*)malloc(sizeof(int )*100);//为ret数组分配空间
       *returnSize=0;//数组长度
       preorder(root, ret,returnSize);//引用函数;
       return ret;
    }

先从简单题走起:

二叉树的递归调用算法:

题中返回int* 型数组首地址,int*型数组大小地址returnsize,给到了一个根节点指针root,这里首先要注意,先要为返回的数组申请空间,

这里解释一下为什么必须分配空间,这是因为a[10]这中空间是在栈上分配空间的,malloc是在堆上分配空间的在函数返回时,栈上的空间会被自动释放,而使用 malloc 分配空间则可避免这个问题。前者导致内存泄漏或者未定义的行为,例如错误运行结果导致内存泄漏输出为

同时这里的returnsize 也是在提醒分配内存空间的意思。

然后我们初始化returnsize,调用递归;

这里的递归函数很好写,首先判断节点是不是空,如果是直接return,如果不是,先把根节点的val存入数组,再调用递归把左节点放进函数走,如果左节点走完,就会退出左递归,再调用右递归同样操作,最终返回数组首地址。

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务