1.前序遍历

前序遍历是指输出当前节点,再输出左子树,最后输出右子树。

对于上图的前序遍历顺序为:

先输出1,1的左子树2存在 -->  输出2,2的左子树4存在 --> 输出4,4的左子树不存在,右子树6存在 --> 输出6,6的左子树不存在,右子树7存在 --> 输出7,7的左子树不存在,右子树不存在。

此时我们观察到4的左右子树都已经遍历完(即2的左子树遍历完),开始访问2的右子树,2的右子树为空。

访问1的右子树,接下来的顺序依次是3 --> 5。遍历完成结束

所以前序遍历结果为:1 --> 2 --> 4 --> 6 -- >7 -->3 --> 5.


2.中序遍历

中序遍历是指先输出当前节点左子树,再输出当前节点,最后输出当前节点右子树。

对于上图的中序遍历顺序为:

1有左子树,访问2

2有左子树,访问4

4左子树为空,输出4,访问右子树6

6左子树为空,输出6,访问右子树7

7左子树为空,输出7,右子树为空

4作为2的左子树遍历完,输出2,访问2的右子树,2的右子树为空

2作为1的左子树遍历完成,输出1,访问1的右子树3

3有左子树,访问5

5左子树为空,输出5,右子树为空

5作为3的左子树遍历完成,输出5,右子树为空。

整棵树遍历结束。

中序遍历结果为:

4 --> 6 --> 7 --> 2 --> 1 --> 5 --> 3


3.后序遍历

后序遍历是指先输出当前节点左子树,再输出右子树,最后输出当前节点。

对于上图的后序遍历结果为:

1有左子树访问2

2有左子树访问4

4左子树为空,访问右子树6

6左子树为空,访问右子树7

7的左右子树都为空,输出7

6的左右子树遍历完,输出6

4的左右子树遍历完,输出4

2的左子树遍历完,右子树为空,输出2

1的左子树遍历完,访问右子树3

3有左子树访问5

5的左右子树为空输出5

3的左子树遍历完,右子树为空,输出3

1的左右子树遍历完,输出1

后序遍历顺序为:7 --> 6 --> 4 --> 2 --> 5 --> 3 --> 1


4.根据前中序结果推导出树的结构

代码实现

利用上述结果

前序遍历:1 --> 2 --> 4 --> 6 -- >7 -->3 --> 5

中序遍历:4 --> 6 --> 7 --> 2 --> 1 --> 5 --> 3

1)根据前序遍历先输出当前节点、再左子树、最后右子树顺序,我们可以知道每一个节点一定是某一棵树的根节点。例如1为整棵树的根节点。

2)根据中序遍历先输出左子树、再当前节点、再最后右子树的顺序,我们知道根节点一定是在中心位置的,根节点左边的节点一定是他的左子树,右边的节点一定是他的右子树。根据前序结果我们知道根节点为1,所以根据中序遍历结果我们可以知道根节点1的左子树节点有4、6、7、2,右子树节点有5、3。

3)对于4672这颗子树,根据前序结果,我们知道根节点为2,所以根据中序遍历结果2的左子树有467,无右子树。

4)对于467这颗子树,根据前序遍历结果,我们知道根节点为4,所以根据中序遍历结果4的左子树为空,右子树为67。

5)对67这颗子树,根据前序遍历结果,我们知道根节点为6,所以根据中序遍历结果4的左子树为空,右子树为7。

6)自此,根节点1的整个左子树遍历完成。结果如图所示:

7)对于根节点1的右子树53,根据前序遍历我们很容易推出3为下一棵子树的根节点,根据中序遍历推出5为3的左子树。

8)自此,整棵树根据前序中序结果推导完毕。


5.根据中后序结果推导出树的结构

代码实现

利用上述结果

中序遍历:4 --> 6 --> 7 --> 2 --> 1 --> 5 --> 3

后序遍历:7 --> 6 --> 4 --> 2 --> 5 --> 3 --> 1

1)根据后序遍历先输出左子树、再右子树、最后当前节点的顺序,我们知道后序遍历的根节点为最后一个节点1。

2)根据前面对中序遍历的分析,我们知道4672是根节点1的左子树,53是根节点1的右子树。

3)分析1左子树4672,根据后序遍历顺序,2为左子树的根节点;根据中序遍历顺序,确定467为2节点的左子树,2节点没有右子树。

4)分析2的左子树467,根据后续遍历顺序,4为根节点,根据中序遍历结果,67为4节点的右子树。

5)分析4的右子树67,根据后序遍历顺序,6为根节点,根据中序遍历结果,7为6节点的右子树。

6)根节点1的左子树全部推导完毕,右子树如法炮制,不再赘述。

树的前序中序后序遍历相关推荐

  1. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  2. 树的先序/中序/后序遍历

    树的结构如下: 先序(深度搜索遍历DFS):先顶点,再左边节点,接着右边节点 前序结果:ABDEHICFG 中序:先左边节点,再顶点,最后右边节点 中序结果:DBHEIAFCG 后序:先左边节点,然后 ...

  3. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  4. 二叉树的前序中序后序遍历java代码实现

    1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...

  5. C++用类实现二叉树的创建,前序中序后序遍历(附完整代码)

    C++用类实现二叉树的创建,前序中序后序遍历(附完整代码) 前序.中序.后序遍历 直接上代码 前序.中序.后序遍历 二叉树的遍历分为前序遍历,中序遍历和后序遍历三种遍历方法.前序遍历的顺序为" ...

  6. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

  7. 二叉树遍历(递归实现前序/中序/后序遍历)

    1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...

  8. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  9. 前序中序、中序后序以及前序后序构造二叉树

    文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...

  10. 序列化和反序列化二叉树 -----前序,中序,后序,层序

    目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...

最新文章

  1. php简单算法之冒泡排序
  2. 分享几个用 Python 给图片添加水印的方法,简单实用
  3. C# 中获取CPU序列号/网卡mac地址
  4. 使用Navicat连接MySQL时出现2059报错的解决方法
  5. tensorflow版本问题导致的错误AttributeError: module ‘tensorflow‘ has no attribute ‘***‘
  6. python获取当前年份_Python根据当前日期取去年同星期日期
  7. 您是否尝试过MicroProfile Starter?
  8. python特殊函数__str__、__repr__和__len__
  9. 对象的释放Dispose和Close对比
  10. Mavlink 协议硬解析主要代码
  11. 徐起预热realme Q5系列:骁龙870+80W快充 新一代千元机皇
  12. 获江苏国资阿里小米等入股 苏宁易购复牌涨停
  13. 如何在Microsoft Excel电子表格之间交叉引用单元格
  14. 浪潮配置ipim_浪潮服务器管理口IP设置_IPMI设置
  15. java简易日历表_java简易日历代码
  16. 7-55 查询水果价格 (15分)
  17. Vue视频播放组件(Video)
  18. 普通人学python有意义吗_普通人学python有什么用
  19. db2 - 统计上一月,前两周的数据
  20. 面试被diss,最后却拿到offer,去还是不去?

热门文章

  1. 各种nvidia显卡nvlink之后深度学习效率对比、各种显卡功耗、温度对比
  2. 53KF 客服系统管理功能速成
  3. golang leaf 游戏玩家注册、登录
  4. 高德地图实现矩形围栏绘制和编辑
  5. The request is badly formed
  6. Windows中CMD常用命令(进程,切换目录)
  7. 原来这样给手机充电,对电池伤害这么大!
  8. PDV的一些个人理解
  9. BotDetect CAPTCHA 网站验证码生成器
  10. js提示框alert出现乱码