树的前序中序后序遍历
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的左子树全部推导完毕,右子树如法炮制,不再赘述。
树的前序中序后序遍历相关推荐
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
- 树的先序/中序/后序遍历
树的结构如下: 先序(深度搜索遍历DFS):先顶点,再左边节点,接着右边节点 前序结果:ABDEHICFG 中序:先左边节点,再顶点,最后右边节点 中序结果:DBHEIAFCG 后序:先左边节点,然后 ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 二叉树的前序中序后序遍历java代码实现
1.前序遍历概述 前序遍历(VLR) 是二叉树遍历的一种,也叫做先根遍历.先序遍历.前序周游,可记做根左右.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树. 若二叉树为空则结束返回,否则: (1 ...
- C++用类实现二叉树的创建,前序中序后序遍历(附完整代码)
C++用类实现二叉树的创建,前序中序后序遍历(附完整代码) 前序.中序.后序遍历 直接上代码 前序.中序.后序遍历 二叉树的遍历分为前序遍历,中序遍历和后序遍历三种遍历方法.前序遍历的顺序为" ...
- 二叉树的前序中序后序遍历
二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...
- 二叉树遍历(递归实现前序/中序/后序遍历)
1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
- 前序中序、中序后序以及前序后序构造二叉树
文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...
- 序列化和反序列化二叉树 -----前序,中序,后序,层序
目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...
最新文章
- 从“小”培养AI安全意识:OpenAI开源最新强化学习训练工具,安全约束自由定制,开箱即用...
- HDU 1846 Brave Game
- NXP Pico i.MX7D上安装Android Things系统疑难杂症汇总
- 地铁人多不多可在线查询了 高德地图率先在北京上线新功能
- 软件测试:web渗透测试怎样入门!讲透了...
- 《算法图解》第二章笔记与课后练习_选择排序算法
- 链表的中间节点--快慢指针
- html5元素用于组合标题元素,HTML5知识初级题目
- 汇编语言程序设计---期末复习大纲知识点总结(王爽第二版)
- Java面试中如何介绍自己的项目经验?
- 如何在微信小程序中使用echarts绘制地图(微信小程序制作疫情数据地图)
- 【清华大学】《逻辑学概论》笔记
- 12.3.4 UDP网络调试助手实例
- R 单样本wilcoxon test
- webERP开源系统安装配置
- 逻辑漏洞渗透与攻防(六)之其他类型逻辑漏洞
- 蚂蚁金服的to B开放
- 计算机软件技术基础图片,计算机软件技术基础.ppt
- 生活用纸抗张强度预测Baseline
- ASP程序中常用的脚本语言