一、题目链接:
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;
}