| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 二叉树递归修炼【下】 -> 正文阅读 |
|
[数据结构与算法]二叉树递归修炼【下】 |
二叉树递归修炼【下】之前的前中后序遍历是递归实现的,都很简单,下面以题代练一下 非递归实现前、中、后序遍历 1. 二叉树的前序遍历题目描述:144. 二叉树的前序遍历 1.1 题目描述
1.2 顺藤摸瓜题目解析就不需要了,这前中后序谁都懂,关键是达到非递归的思想,已解决可能产生的栈溢出问题 利用栈我们可以存储左子树节点,然后用循环访问他的左路节点上的右子树 1.3 抽丝剥茧先把所有的左子树节点放到栈中,然后依次访问当前cur的右子树节点,凡是访问到右子树节点,我就重新来cur去访问左路节点,直到cur走向空之后,pop掉stack中的top值,拿到下一个左路节点,这样的话我们利用栈的特性模拟了递归的操作,巧妙利用循环完成前序
1.4 手到拈来
2. 二叉树的中序遍历题目描述:94. 二叉树的中序遍历 2.1 抽丝剥茧仿照前序遍历,我们可以实现中序遍历,中序类似的不就是先访问左子树,再访问左子树的右路 2.2 手到拈来
#3. 二叉树的后序遍历 题目描述:145. 二叉树的后序遍历 3.1 抽丝剥茧还是一样的,思考一下,父节点应该是至少要被访问多次,入栈之后从左子树回来有一次,再去右子树访问,直到第二次访问回到父亲节点的时候才能push_back进入vector 因此可以借助一个办法来识别第一次和第二次访问,如果第二次访问了说明上一个访问的节点就是右子树 那么只需要有一个prev指针,指向上一个被pop掉的节点就可以了 3.2 手到拈来
4. 从前序与中序遍历序列构造二叉树题目链接:105. 从前序与中序遍历序列构造二叉树 4.1 题目描述4.2 顺藤摸瓜给了前序和中序,而且题目说没有重复数字,那我们就可以构建一棵树了 我们一般可以通过前序确定根,然后通过中序确定左右子树的范围,然后递归确定左子树和右子树 4.3 抽丝剥茧开始分析代码怎么写,首先这道题目还是使用递归,递归就要考虑递归参数 4.3.1 递归参数按照题目给的递归参数肯定是不够的,我们发现对于前序我们所需要的是找根,那就是一个指针就可以了,但是对于中序可以发现其实我们要的是区间,所以所需要两个指针,也就是如下,我们整一个子函数,用来递归
同时我们要注意因为我们需要的是同一个pi在里面++移动,如果不加的话上一层的++不会影响下一层,所以说还是要传引用
4.3.2 代码思路先用前序创建根,然后在中序中去找到相同的根节点,这样就能够划分左右区间 这里我们需要确定返回条件
注意不能取等于号,不然9就没有在该进的地方进去,等于表示还有一个值 4.4 手到拈来
5. 从中序与后序遍历序列构造二叉树题目链接:106. 从中序与后序遍历序列构造二叉树 5.1 题目描述5.2 顺藤摸瓜这道题目我们将使用与之前完全相同的思路,只需要修改一下前序与后序之间的不同即可,前序的时候给出的vector是左子树右子树根,现在后序的话是左子树右子树根 我们还是可以通过后序确定根,然后通过中序确定左右子树的范围,然后递归确定左子树和右子树 5.3 抽丝剥茧同样的写一个子函数
然后当我们在中序找到根节点之后,按照–pi,在后序中应该是先遇到右子树,在遇到左子树,所以我们应该先往右树递归,再往左树递归
5.4 手到拈来
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:33:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |