144. 二叉树的前序遍历 - 力扣(LeetCode)(点击前面链接即可查看题目)
一、题目
给你二叉树的根节点
root
,返回它节点值的 前序 遍历。示例 1:
输入:root = [1,null,2,3] 输出:[1,2,3]示例 2:
输入:root = [] 输出:[]示例 3:
输入:root = [1] 输出:[1]示例 4:
输入:root = [1,2] 输出:[1,2]示例 5:
输入:root = [1,null,2] 输出:[1,2]提示:
- 树中节点数目在范围
[0, 100]
内-100 <= Node.val <= 100
进阶:递归算法很简单,你可以通过迭代算法完成吗?
二、解题思路以及代码
注:
1.本题中returnSize,指的是二叉树的结点数
2.返回的数组必须是malloc开辟的
解题思路:
1. 本题要想控制数组的下标要传入下标i的地址,而不可以直接传入i的数值
2. 不能在递归函数内创建下标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().
*/
void prevBTree(int* pa, struct TreeNode* root,int* pi)
{
if(NULL == root)
{
return;
}
pa[*pi] = root->val;
(*pi)++;
prevBTree(pa, root->left, pi);
prevBTree(pa, root->right, pi);
}
int TreeSize1(struct TreeNode* root)
{
return root == NULL? 0:TreeSize1(root->left) + TreeSize1(root->right) + 1;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
*returnSize= TreeSize1(root);
int* a = (int*)malloc(*returnSize * sizeof(int));
int i = 0;
prevBTree(a,root,&i);
return a;
}