遍历二叉树的递归算法
目录
一、遍历二叉树的相关概念
二、四种遍历二叉树的方式
三、遍历二叉树的算法
四、遍历算法的分析
一、遍历二叉树的相关概念
1、遍历定义:顺着某 一条搜索路径巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次(又称周游)。“访问”的含义很广,可以是对结点作各种处理,如:输出结点的信息、修改结点的数据值等,但要求这种访问不破坏原来的数据结构。
2、遍历目的:得到树中所有结点的一个线性排列。
3、遍历用途:它是树结构插入、 删除、修改、查找和排序运算的前提,是二叉树一切运算的基础和核心。
二、四种遍历二叉树的方式
1、先序遍历二叉树:
若二叉树为空,则空操作;否则
(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。
2、中序遍历二叉树
若二叉树为空,则空操作;否则
(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。
3、后序遍历二叉树
若二叉树为空,则空操作;否则
(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。
4、树的层次遍历,这种遍历方法必需用到队列,因为在访问根节点后,如果不将他的左右孩子入队,到时候访问右孩子时,就又要回到根节点来找到右孩子的地址,增加了时间复杂度。
三、遍历二叉树的算法
1、先序遍历二叉树的算法描述
Status PreOrderTraverse(BiTree T){if(T==NULL) return OK; //空二叉树else{visit(T); //访问根结点,visit是一个函数例如其可以包含输出根节点printf("%d\t",T->data)。PreOrderTraverse(T->lchild); //递归遍历左子树PreOrderTraverse(T->rchild); //递归遍历右子树}}
2、先序遍历二叉树的图形解释递归过程
3、中序遍历二叉树的算法描述
Status InOrderTraverse(BiTree T){if(T==NULL) return OK; //空二叉树else{InOrderTraverse(T-> lchild); //递归遍历左子树
visit(T); //访问根结点;InOrderTraverse(T-> rchild); //递归遍历右子树}
}
4、后序遍历二叉树的算法描述
Status PostOrderTraverse(BiTree T){if(T==NULL) return OK; //空二叉树else{PostOrderTraverse(T->Ichild); //递归遍历左子树
PostOrderTraverse(T-> rchild); //递归遍历右子树
visit(T); //访问根结点}}
四、遍历算法的分析
1、如果去掉输出语句,从递归的角度看,三种算法是完全相同的,或说这三种算法的访问路径是相同的,只是访问结点的时机不同。如下图所示:
遍历二叉树的递归算法相关推荐
- 遍历二叉树的递归算法与非递归算法
遍历二叉树的递归算法与非递归算法 先来看下面这棵二叉树.如图1.现在我们要对它进行先序遍历.递归思想:就是把这个大树拆分成N棵小树,每棵小树都进行一次先序遍历.再把这些遍历连合起来就是这棵树的先序遍历 ...
- 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)
一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...
- C语言 中序遍历二叉树--非递归算法
完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h>typedef struct B ...
- (※)中序遍历二叉树的非递归算法
在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈 ...
- 数据结构之遍历二叉树
遍历二叉树 在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点.这就提出遍历二叉树的问题,即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次.遍历对线性结构来说, ...
- [转载]二叉树先序、中序、后序三种遍历的非递归算法
本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...
- 二叉树遍历的非递归算法
大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...
- 二叉树中序遍历的非递归算法
根据二叉树的先序遍历结果创建一棵二叉树,即先创建根结点,然后再创建左子树,最后创建右子树,对于左右子树的创建也遵循根左右的原则,所以对于左右子树的创建可以递归调用本函数,此问题是典型的需要用递归算法求 ...
- 数据结构 | 二叉树 先根、中根、后根遍历的非递归算法
上期文章: 数据结构 | 树与二叉树 参考教材:<数据结构>,刘大有 编程语言: C++ 目录 (一)二叉树的存储结构 (二)二叉树的遍历 先根遍历非递归算法 中根遍历非递归算法 后根遍历 ...
最新文章
- 在衡量MPLS性能时需要注意什么
- 生产环境使用ioprofile一定要谨慎
- 基于帝国cms 7.5带支付个人也可以使用的h5微信商城
- python处理完数据导入数据库_python操作数据库之批量导入
- akka 消息发送接收_Akka型演员:探索接收器模式
- HTML5与原生APP之争胜负已出?
- aes加密php源码,AES加解密类源码 · ThinkPHP5高阶实战教程 --诠释为API开发而生 · 看云...
- Python+sklearn训练结果保存与加载(以垃圾邮件分类为例)
- swift网络编程入门应用:天气预报
- Qt中QString、int、char、QByteArray、std::string【八大转换】
- java 类型转换方法_Java中的实用类型转换的方法
- 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
- TCP/IP协议分层模型以及数据的封装和分用
- 管家婆普及版_昆明逸马软件 — 管家婆普及版新手入门指南
- openwrt - transmission
- 分享一个本人打造的公众号吸粉、推广方案。
- 尚硅谷java——项目一 家庭收支记账软件
- 公众号快速注册并认证小程序
- 电子面单打印结果通知回调API接口
- 小米、华为、一加、OPPO接连入场,电视的魅力在哪里?