力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-preorder-traversal/description/
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-inorder-traversal/description/
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-postorder-traversal/description/
给你二叉树的根节点 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]
输出结果在数组中。
所以:
第一步是统计树中的结点个数。
有了个数之后才能为数组动态申请空间。
之后就是将根节点指向的值,存放到数组中。
最核心的还是递归,遍历树。
前序,中序,后序,大部分过程是一样的。
唯一不同的是递归的方式。(上一篇中有详细简绍)。
int TreeSize(struct TreeNode* root){
return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
void _preorderTraversal(struct TreeNode* root, int* a,int*pi){
if(root==NULL){
return;
}
a[*pi]=root->val;
++(*pi);
_preorderTraversal(root->left,a,pi);
_preorderTraversal(root->right,a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
int size=TreeSize(root);
int *a=(int*)malloc(sizeof(int)*size);
int i=0;
_preorderTraversal(root,a,&i);
* returnSize=size;
return a;
}
int TreeSize(struct TreeNode* root){
return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
void _inorderTraversal(struct TreeNode* root, int* a,int*pi){
if(root==NULL){
return;
}
_inorderTraversal(root->left,a,pi);
a[*pi]=root->val;
++(*pi);
_inorderTraversal(root->right,a,pi);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
int size=TreeSize(root);
int *a=(int*)malloc(sizeof(int)*size);
int i=0;
_inorderTraversal(root,a,&i);
* returnSize=size;
return a;
}
int TreeSize(struct TreeNode* root){
return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
void _postorderTraversal(struct TreeNode* root, int* a,int* pi){
if(root==NULL){
return;
}
_postorderTraversal(root->left,a,pi);
_postorderTraversal(root->right,a,pi);
a[*pi]=root->val;
(*pi)++;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize) {
int size=TreeSize(root);
int*a=(int*)malloc(sizeof(int)*size);
int i=0;
_postorderTraversal(root,a,&i);
*returnSize=size;
return a;
}