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