/**
* 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存入数组,再调用递归把左节点放进函数走,如果左节点走完,就会退出左递归,再调用右递归同样操作,最终返回数组首地址。

京公网安备 11010502036488号