力扣 144.二叉树的前序遍历

目录

  • 1.解题思路
  • 2.代码实现
    • 2.1获得节点数接口:
    • 2.2递归接口:
    • 2.3最终实现

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


结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

你可能感兴趣的:(leetcode,算法,数据结构)