给你二叉树的根节点
root
,返回它节点值的 前序 遍历。示例 1:
输入:root = [1,null,2,3] 输出:[1,2,3]
解题思路:
本体我主要运用递归调用的思想,进行遍历。但在传值时,一直出错,最后发现需要用到传址调用的思想;
int TreeSzie(struct TreeNode* root)
{
//不知道这个树需要开辟的空间有多大,先求树的节点个数
return root==NULL?0:TreeSzie(root->left)+TreeSzie(root->right)+1;
}
此时传递i需要地址
void _prevOrder(struct TreeNode* root,int* arr,int* i)
{
if(root==NULL)
{
return;
}
arr[(*i)++]=root->val;
_prevOrder(root->left,arr,i);
_prevOrder(root->right,arr,i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSzie(root);
int* arr=(int*)malloc(sizeof(int)*size);
int i=0;
_prevOrder(root,arr,&i);//递归调用
//由于每个i需要递归调用同一个初始的i,所以要传地址过去,保证i一样
*returnSize=size;
return arr;
}