目录

一、遍历二叉树的相关概念

二、四种遍历二叉树的方式

三、遍历二叉树的算法

四、遍历算法的分析


一、遍历二叉树的相关概念

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. 遍历二叉树的递归算法与非递归算法

    遍历二叉树的递归算法与非递归算法 先来看下面这棵二叉树.如图1.现在我们要对它进行先序遍历.递归思想:就是把这个大树拆分成N棵小树,每棵小树都进行一次先序遍历.再把这些遍历连合起来就是这棵树的先序遍历 ...

  2. 数据结构-----后序遍历二叉树非递归算法(利用堆栈实现)

    一.非递归后序遍历算法思想 后序遍历的非递归算法中节点的进栈次数是两个,即每个节点都要进栈两次,第二次退栈的时候才访问节点. 第一次进栈时,在遍历左子树的过程中将"根"节点进栈,待 ...

  3. C语言 中序遍历二叉树--非递归算法

    完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h>typedef struct B ...

  4. (※)中序遍历二叉树的非递归算法

    在此之前,我们已经学习了中序遍历二叉树的递归算法,相信大家已经将其牢牢掌握了. 除了使用递归思想作为求解问题的钥匙,还可以借助栈来以非递归方式实现该问题的求解. 首先,我们要讨论存储二叉树结点信息的栈 ...

  5. 数据结构之遍历二叉树

    遍历二叉树 在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点.这就提出遍历二叉树的问题,即如何按某条搜索路径巡访树中每个结点,使得每个结点均被访问一次,而且仅被访问一次.遍历对线性结构来说, ...

  6. [转载]二叉树先序、中序、后序三种遍历的非递归算法

    本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...

  7. 二叉树遍历的非递归算法

    大一下半期数据结构 知识点 递归算法虽然简单,但一般而言,其执行效率并不高.对于二叉树的遍历操作,可以仿照递归算法执行过程中工作栈的状态变化得到非递归算法. 一.前序遍历非递归算法 二叉树前序遍历非递 ...

  8. 二叉树中序遍历的非递归算法

    根据二叉树的先序遍历结果创建一棵二叉树,即先创建根结点,然后再创建左子树,最后创建右子树,对于左右子树的创建也遵循根左右的原则,所以对于左右子树的创建可以递归调用本函数,此问题是典型的需要用递归算法求 ...

  9. 数据结构 | 二叉树 先根、中根、后根遍历的非递归算法

    上期文章: 数据结构 | 树与二叉树 参考教材:<数据结构>,刘大有 编程语言: C++ 目录 (一)二叉树的存储结构 (二)二叉树的遍历 先根遍历非递归算法 中根遍历非递归算法 后根遍历 ...

最新文章

  1. 在衡量MPLS性能时需要注意什么
  2. 生产环境使用ioprofile一定要谨慎
  3. 基于帝国cms 7.5带支付个人也可以使用的h5微信商城
  4. python处理完数据导入数据库_python操作数据库之批量导入
  5. akka 消息发送接收_Akka型演员:探索接收器模式
  6. HTML5与原生APP之争胜负已出?
  7. aes加密php源码,AES加解密类源码 · ThinkPHP5高阶实战教程 --诠释为API开发而生 · 看云...
  8. Python+sklearn训练结果保存与加载(以垃圾邮件分类为例)
  9. swift网络编程入门应用:天气预报
  10. Qt中QString、int、char、QByteArray、std::string【八大转换】
  11. java 类型转换方法_Java中的实用类型转换的方法
  12. 浏览器中的 HTTP 请求从发起到结束经历的所有阶段
  13. TCP/IP协议分层模型以及数据的封装和分用
  14. 管家婆普及版_昆明逸马软件 — 管家婆普及版新手入门指南
  15. openwrt - transmission
  16. 分享一个本人打造的公众号吸粉、推广方案。
  17. 尚硅谷java——项目一 家庭收支记账软件
  18. 公众号快速注册并认证小程序
  19. 电子面单打印结果通知回调API接口
  20. 小米、华为、一加、OPPO接连入场,电视的魅力在哪里?

热门文章

  1. C++ 左移运算符和右移运算符的使用
  2. 如何在CSDN博客中插入图片
  3. 2d 互相关算法-python
  4. 图片的常见的8种格式
  5. 第二章 网站开发基础之HTML教程 - 二、常用HTML标签:i,斜体字效果(内联元素)
  6. 火信脚本,火信引流脚本爆粉加人
  7. MQTT Part 5 主题和最佳实践
  8. 地质灾害监测系统 地质灾害监测解决方案
  9. 「津津乐道播客」#190. 听播客是一种双向行为么?
  10. 计算机类考中科院的研究生,考中科院计算机研究生的几个问题