二叉树的前序遍历(oj题)

时间:2024-06-02 07:46:52

一、题目链接:

https://leetcode-cn.com/problems/binary-tree-preorder-traversal/

二、题目思路

先调用二叉树节点计算函数,得到二叉树的总结点数。然后申请该大小的数组空间。

再使用前序遍历,依次访问每个结点的数据,依次存放在数组之中。(在递归中用下标的指针来保证可以对数组下标的改变)

三、题解代码

//计算结点个数的函数
int LeafNum(struct TreeNode*root)
{
    if(root==NULL)
    return 0;
    else
    return LeafNum(root->left)+LeafNum(root->right)+1;
}

// 二叉树前序遍历
void BinaryTreePrevOrder(struct TreeNode* root,int *a,int*pi)
{
	if (root == NULL)
	{
		return;
	}
  
   a[*pi]=root->val;
   (*pi)++;

   //访问左右子树
	BinaryTreePrevOrder(root->left,a,pi);
	BinaryTreePrevOrder(root->right,a,pi);
}

int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    //指针returnSize 记录的是元素的个数
    *returnSize=LeafNum(root);
    int *a=(int*)malloc(sizeof(int)*(*returnSize));//申请结点个数大小的数组空间
    int i=0;
   BinaryTreePrevOrder( root,a,&i);

   return a;
}