| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 二叉树非递归先序、中序、后序遍历过程详解及C++详细实现 -> 正文阅读 |
|
[C++知识库]二叉树非递归先序、中序、后序遍历过程详解及C++详细实现 |
二叉树非递归先序、中序、后序遍历过程详解及C++详细实现前置知识点如下: 树与二叉树的定义,性质。二叉树的顺序存储结构,链式存储结构。 二叉树的先序,中序,后序,层序遍历;由遍历序列构造二叉树详解及C++详细实现 如下图所示,用带箭头的虚线表示了这3种遍历算法的递归执行过程。其中,向下的箭头表示更深 一层的递归调用,向上的箭头表示从递归调用退出返回。 例如,由于中序遍历中访问结点是在遍历左子树之后、遍历右子树之前进行的,则带圆形的字符标在向左递归返回和向右递归调用之间 如上图所示,只要沿虚线从1出发到2结束,将沿途所见的三角形(或圆形或方形)内的字符记下,便得到遍历二叉树的先序(或中序或后序)序列 沿虚线游走:
非递归中序遍历借助栈,我们来分析中序遍历的访问过程: 1)沿着根的左孩子,依次入栈,直到左孩子为空,说明已找到可以输出的结点,此时栈内元素依次为 A B D {\rm ABD} ABD 。 2)栈顶元素出栈并访问:若其右孩子为空,继续执行步骤2,若其右孩子不空,将右子树转执行步骤1。 如上图二叉树为例,分析其非递归中序遍历过程: 栈顶 D {\rm D} D 出栈并访问,它是中序序列的第一个结点; D {\rm D} D 的右孩子为空,栈顶 B {\rm B} B 出栈并访问; B {\rm B} B 右孩子不空,将其右孩子 E {\rm E} E 入栈, E {\rm E} E 左孩子为空,栈顶 E {\rm E} E 出栈并访问; E {\rm E} E 右孩子为空,栈顶 A {\rm A} A 出栈并访问; A {\rm A} A 右孩子不空,将其右孩子 C {\rm C} C 入栈, C {\rm C} C 左孩子为空,栈顶 C {\rm C} C 出栈并访问。由此得到中序序列 D B E A C {\rm DBEAC} DBEAC 。 根据分析可以写出中序遍历的非递归算法如下:
非递归先序遍历先序遍历和中序遍历的基本思想是类似的,只需把访问结点操作放在入栈操作的前面即可
非递归后序遍历后序遍历的非递归实现是三种遍历方法中最难的。因为在后序遍历中,要保证左孩子和右孩子都已被访问并且左孩子在右孩子前访问才能访问根结点。 后序非递归遍历算法的思路分析: 现在依然结合上图的二叉树来分析,后序非递归遍历的过程如下: 1)沿着根的左孩子,依次入栈,直到左孩子为空。此时栈内元素依次为
A
B
D
{\rm ABD}
ABD 。 在上述思想的第2步中,必须分清返回时是从左子树返回的还是从右子树返回的,因此设定一个辅助指针 后序遍历的非递归算法如下:
注意:每次出栈访问完一个结点就相当于遍历完以该结点为根的子树,需将 完整代码非递归先序、中序、后序遍历完整代码以及测试代码如下:
运行结果:
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 17:02:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |