1.解题思路
该题要利用前序遍历,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第一步要写个函数实现获得树的节点数,又因为该题提供的接口里写了申请空间,因为本题自带的接口不适合递归,所以我们可以将递归操作再另外写个函数来实现.
2.代码实现
2.1获得节点数接口:
int TreeNums(struct TreeNode* root) { if(root==NULL) return 0; return TreeNums(root->left)+TreeNums(root->right)+1; }
2.2递归接口:
void Prev(struct TreeNode* root,int *a,int *i) { if(root==NULL) return ; a[(*i)++]=root->val; Prev(root->left,a,i); Prev(root->right,a,i); }
2.3最终实现
int TreeNums(struct TreeNode* root) { if(root==NULL) return 0; return TreeNums(root->left)+TreeNums(root->right)+1; } void Prev(struct TreeNode* root,int *a,int *i) { if(root==NULL) return ; a[(*i)++]=root->val; Prev(root->left,a,i); Prev(root->right,a,i); } int* preorderTraversal(struct TreeNode* root, int* returnSize) { int size=TreeNums(root); int *a=(int*)malloc(sizeof(int)*size); int pi=0; Prev(root,a,&pi); *returnSize=size; return a; }
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!