树的遍历顺序大体分为三种:前序遍历(先根遍历、先序遍历),中序遍历(中根遍历),后序遍历(后根遍历)。

如图所示二叉树:

前序遍历:

前序遍历可以记为根左右,若二叉树为空,则结束返回。

前序遍历的规则:

(1)访问根节点

(2)前序遍历左子树

(3)前序遍历右子树

这里需要注意:在完成第2,3步的时候,也是要按照前序遍历二叉树的规则完成。

前序遍历的输出结果:ABDECF

中序遍历:

中序遍历可以记为左根右,也就是说在二叉树的遍历过程中,首先要遍历二叉树的左子树,接着遍历根节点,最后遍历右子树。

同样,在二叉树为空的时候,结束返回。

中序遍历的规则:

(1)中序遍历左子树

(2)访问根节点

(3)中序遍历右子树

注意:在完成第1,3步的时候,要按照中序遍历的规则来完成。

中序遍历的输出结果:DBEAFC

后序遍历:

后序遍历可以记为左右根,也就是说在二叉树的遍历过程中,首先按照后序遍历的规则遍历左子树,接着按照后序遍历的规则遍历右子树,最后访问根节点。

在二叉树为空的时候,结束返回。

后序遍历二叉树的规则:

(1)后序遍历左子树

(2)后序遍历右子树

(3)访问根节点

注意:在完成1,2步的时候,依然要按照后序遍历的规则来完成。

后序遍历的输出顺序:DEBFCA

————————————————————————————————————————————————————————————

例题:

已知前序、中序遍历,求后序遍历

前序遍历:  DBAECHMZ

中序遍历:ABCEDMHZ

先根据前序遍历得到根结点为D。根据中序遍历就可以知道ABCE为左子树,MHZ为右子树。

再根据前序遍历,D之后就是BAEC为左子树,所以B是离根节点最近的一个左子树的根结点,B为ADCE左子树的根结点,

再根据前序遍历,D之后的HMZ为右子树,      所以H是离根结点最近的一个右子树的根结点,H为HMZ右子树的根结点,

所以:                        D

B   H

接下来截断为:

前序:BAEC

中序:ABCE

再根据前序遍历,左子树根结点为B,根据中序遍历就可以知道A为左子树,CE为右子树

再根据前序遍历,B之后就是A为左子树,没啥好分析了

再根据前序遍历,B之后就是EC为右子树,所以E是离根结点最近的一个右子树的根结点,E为EC右子树的根结点

所以:                    B

A  E

同理,再分析右子树,最后可得二叉树的结构为:   D

B   H

∧     ∧

A   E  M  Z

C

搞定! 一般先用前序遍历跟后序遍历分析出哪个是根结点,用中序遍历分析出左右子树!愉快的一晚!

前序遍历、中序遍历和后续遍历相关推荐

  1. 二叉树前序,中序求后续;中序,后续求前序

    一, 1,知道前序,中序,求后续 前序:ABCDEFGHI 中序:BCAEDGHFI 由图可知后序为:CBIHGFEDA 2.知道中序,后续求前序 中序:BDCEAFHG 后序:DECBHGFA 由后 ...

  2. java 二叉树的实现以及前序、中序、后续遍历实现

    目录 前言 完全二叉树 完全二叉树实现代码 测试 输出 前言 二叉树是n个有限元素的集合,该集合或者为空.或者由一个称为根(root)的元素及两个不相交的.被分别称为左子树和右子树的二叉树组成,是有序 ...

  3. 二叉树的前序、中序、后序遍历非递归实现

    这是leetcode上的3个题目,要求用非递归实现,其中以后序遍历实现最难,既然递归实现的三种遍历程序只需要改变输入代码顺序,为什么循环不可以呢,带着这种执拗的想法,我开始了这次研究 我依然是将递归用 ...

  4. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  5. 已知前序中序求层序 c语言递归,二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现...

    # re: 二叉树的遍历:前序,中序输出有点问题,但是不知道到怎么修改,想请教各位大神  回复  更多评论 #include"stdio.h" #include"mall ...

  6. 如何判断二叉树的前序,中序,后序遍历

    文章目录 前言 一.如何判断二叉树的前序,中序,后序遍历? 二.已知二叉树的前序遍历和中序遍历,如何得到它的后序遍历? 三.程序实现 总结 前言 最近复习题中看到二叉树,对于它的前序,中序,后序遍历的 ...

  7. 数据结构笔记 —— 二叉树(前序、中序、后序遍历和查找)

    本篇博客是根据b站尚硅谷的数据结构教程,学习后写的学习笔记,本篇博客的重点在自己编写的代码注释和过程分析上 https://www.bilibili.com/video/BV1E4411H73v?p= ...

  8. 二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

    自古逢秋悲寂寥,我言秋日胜春朝 二叉树结构说明 本博客使用树节点结构,如下所示: Kotlin 版本 class TreeNode(var value: String, var leftNode: T ...

  9. 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先

    前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...

  10. 用栈作为存储实现二叉树先序遍历 中序遍历 后续遍历

    package com.example.ljia.Structure.tree;import lombok.Data;import java.util.Stack;/*** @ Author :Sam ...

最新文章

  1. 年薪50万的程序员_这些年薪50万+的程序员都经历了什么?
  2. 【leetcode 简单】第十一题 搜索插入位置
  3. scala教程之:可见性规则
  4. Mac,WIN下支撑 IPV6的 sftp客户端
  5. koa2 mysql 中间件_Koa2第二篇:中间件
  6. sliverlight 开发FAQ
  7. 【hive】怎么解决Hive中metaData 字符集中文问题?--详细步骤
  8. Druid数据库连接池配置
  9. C#实现用Enter键和Tab键同样功能
  10. Git提交空文件夹的技巧
  11. Analysis::checkBidir2Nx2N()
  12. ZZULIOJ1051-1055Python解法
  13. 百度地图,根据地址计算经度纬度
  14. 1044: 不及格率 C语言
  15. wps折线图如何画多条折线_如何用wps制作折线图
  16. 调用DialogFragment做进度条报java.lang.IllegalStateException: Fragment already added问题的最终解决方案
  17. 三、mongdb 查询
  18. 2021中国市场十大IT热点
  19. xampp mysql密码忘记_XAMPP重置MySQL密码
  20. java 微信模板_java开发微信模板消息推送

热门文章

  1. Mac Duet使用教程
  2. gm220s路由器怎么设置_中国移动GM220-S光猫修改为桥接模式并启用IPV6
  3. 医学图像分类 神经网络,神经网络图像识别技术
  4. 计算机汉字区位码十进制,[计 算 机]汉字区位码\国标码\机内码之间的换算
  5. 在Windows下搭建Vue开发环境
  6. 常见mysql优化 面试题
  7. mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句
  8. html5动漫人物小部件制作,虚拟动漫人物制作器app
  9. 微信小程序的弹窗提示
  10. Java动态代理(dynamic proxy)