leetcode:前序遍历

题目描述

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

leetcode:前序遍历_第1张图片

题目分析

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

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

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

leetcode:前序遍历_第2张图片

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

leetcode:前序遍历_第3张图片

代码示例

/**
 * 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;
}

leetcode:前序遍历_第4张图片

你可能感兴趣的:(#,刷题,leetcode,算法,职场和发展)