当前位置: 首页 > news >正文

二叉树的前序遍历

问题描述:

给你二叉树的根节点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

解题思路:

利用前序将遍历的数据放置到数组中,最后返回数组的地址即可

注意:

  • 由于不知道二叉树中有多少个数据,不知道给数组扩容多少空间,这里就需要调用二叉树的节点个数的函数,最后要把数组的大小传出去输出。
  •  对表示数组下标的i,每一层递归函数都有一个i,递归返回时下一层改变的i不会影响上一层中的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().*/
int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}
//将前序遍历之后的数据存入数组内
void _prevOrder(struct TreeNode* root, int* a, int* i)
{if (root == NULL)return;a[*i] = root->val;(*i)++;_prevOrder(root->left, a, &i);_prevOrder(root->right, a, &i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize)
{int size = TreeSize(root);int* a = (int*)malloc(size * sizeof(int));int i = 0;_prevOrder(root, a, &i);//将数组的大小传出去*returnSize = size;return a;
}

小tip:已知二叉树的前序和中序得遍历过程,能否得到二叉树原本的结构?

假设前序为EFHIGJK,中序为HFIEJKG,试求出二叉树原本的结构。

通过之前的学习,我们可知前序遍历的顺序是根,左子树,右子树,中序遍历的顺序是左子树,根,右子树,由此可知,前序确定了该二叉树的根节点E,而中序可确定左子树和右子树,由此可知HFI为根节点的左子树,而JKG为根节点的右子树,又因为前序遍历完根节点之后就是左子树,故F为左子树,H为F的左子树,I为F的右子树,G为根节点的右子树,以此类推通过中序可发现,G后没遍历的数据,所以G无右子树,因为J比K先遍历,所以K不可能为J的左子树,因此只能为右子树。此二叉树的结构如下:

由此我们可以总结出一个结论:

已知前序+中序,后序+中序可推出二叉树结构,而后序+前序不可推。

http://www.lryc.cn/news/257963.html

相关文章:

  • final的安全发布
  • 3易懂AI深度学习算法:长短期记忆网络(Long Short-Term Memory, LSTM)生成对抗网络 优化算法进化算法
  • 云计算 云原生
  • 深拷贝、浅拷贝 react的“不可变值”
  • 赛宁网安多领域亮相第三届网络空间内生安全发展大会
  • LintCode 123 · Word Search (DFS字符处理经典题!)
  • SpringCloud面试题——Sentinel
  • 【精选】 VulnHub (超详细解题过程)
  • 数据结构与算法-Rust 版读书笔记-2线性数据结构-队列
  • Android Kotlin Viewbinding封装
  • Flutter:web项目跨域问题解决
  • 汽车标定技术(十二)--A2L文件生成的方法
  • 《PySpark大数据分析实战》-03.了解Hive
  • 经验分享|MySQL分区实战(RANGE)
  • Arrays.asList() 和 Collections.singletonList()
  • Firmware Analysis Plus (Fap)固件模拟安装教程(最新)
  • 使用包、Crate 和模块管理项目(上)
  • 【Kotlin】
  • JavaDay17
  • Python爬取酷我音乐
  • 项目实战第四十七讲:易宝支付对接详解(保姆级教程)
  • python的websocket方法教程
  • Qt处理焦点事件(获得焦点,失去焦点)
  • SiteGround如何设置WordPress网站自动更新
  • http代理和SOCK5代理谁更安全?
  • Kotlin关键字二——constructor和init
  • java的long类型超过9位报错:the literal 987654321000 of type int is out of range
  • 【Java期末复习资料】(4)模拟卷
  • 【计算机网络】UDP报文详解
  • 排序算法——归并排序