题目描述

题目链接力扣(LeetCode)官网 – 全球极客挚爱的技术成长平台

题目分析

这道题的难点在于,前序遍历一遍之后需要数值存在数组里,returnsize就是数组大小

所以我们构建一个函数计算节点个数

然后我们前序遍历遍历的同时将数值存到数组

最后函数里先保存数组大小,开辟一个数组,用i控制数组往后走,为了防止局部变量函数销毁我们i地址

代码示例

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int TreeSize(struct TreeNode* root)
{
    return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
//int i=0;
void preorder(struct TreeNode*root,int *a,int *i)
{
    if(root==NULL)
        return;
    a[(*i)++]=root->val;
    preorder(root->left,a,i);
    preorder(root->right,a,i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int n=TreeSize(root);
    int *a=(int*)malloc(sizeof(int)*n);
    *returnSize=n;
    int i=0;
    preorder(root,a,&i);
    return a;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注