二叉树的先序、中序、后序遍历序列

二叉树的先序、中序、后序遍历序列nbsp nbsp nbsp nbsp 二叉树的遍历主要有三种 1 先 根 序遍历 根左右 2 中 根 序遍历 左根右 3 后 根 序遍历 左右根 举个例子 先 根 序遍历 根左右 ABDHEICFJKG 中 根 序遍历 左根右 DHBEIAJFKCG 后 根 序遍历 左右根 HDIEBJKFGCA nbsp nbsp nbsp nbsp 以后 根 序

    二叉树的遍历主要有三种:

(1)先(根)序遍历(根左右)

(2)中(根)序遍历(左根右)

(3)后(根)序遍历(左右根)

举个例子:

二叉树的先序、中序、后序遍历序列

先(根)序遍历(根左右):A B D H E I C F J K G

中(根)序遍历(左根右) : D H B E I A J F K C G

后(根)序遍历(左右根) : H D I E B J K F G C A

    以后(根)序遍历为例,每次都是先遍历树的左子树,然后再遍历树的右子树,最后再遍历根节点,以此类推,直至遍历完整个树。

    此外,还有一个命题:给定了二叉树的任何一种遍历序列,都无法唯一确定相应的二叉树。但是如果知道了二叉树的中序遍历序列和任意的另一种遍历序列,就可以唯一地确定二叉树。

例子1:已知二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是(cedba)。

(1)中序遍历:debac

后序遍历:dabec

后序遍历序列的最后一个结点是根结点,所以可知c为根结点。

中序遍历序列的根结点在中间,其左边是左子树,右边是右子树。所以从中序遍历序列中可看出,根结点c只有左子树,没有 右子树。

 

(2)中序遍历:deba

后序遍历:dabe

后序遍历序列的最后一个结点是根结点,所以可知e为c的左子树的根结点。

中序遍历序列的根结点在中间,其左边是左子树,右边是右子树。所以从中序遍历序列中可看出,根结点e的左子结点是d,右子树是ba。

 

(3)中序遍历:ba

后序遍历:ab

由后序遍历序列可知b为e的右子树的根结点。由中序遍历序列中可看出,a为根结点b的右子结点。

树的结构如下:

二叉树的先序、中序、后序遍历序列

class Node: def __init__(self, dat, left=None, right=None): self.data = dat self.left = left self.right = right def rebuild(rear, center): if not rear: return cur = Node(rear[-1]) index = center.index(rear[-1]) cur.left = rebuild(rear[:index], center[:index]) cur.right = rebuild(rear[index:-1], center[index + 1:]) #rear[index:-1]是到倒数第二个数 return cur def pre_order(t): if t == None: return print(t.data) pre_order(t.left) pre_order(t.right) if __name__ == "__main__": rear = ['d','a','b','e','c'] center = ['d','e','b','a','c'] t = rebuild(rear, center) pre_order(t)

例子2:已知二叉树的前序遍历序列是abdgcefh,中序遍历序列是dgbaechf,它的前序遍历序列是(gdbehfca)。

 

(1)先序遍历:abdgcefh

中序遍历:dgbaechf

先序遍历序列的第一个结点是根结点,所以可知a为根结点。

中序遍历序列的根结点在中间,其左边是左子树,右边是右子树。所以从中序遍历序列中可看出,根结点a的左子树是dgb,右子树是echf。

a的左子树:

(2)先序遍历:bdg

中序遍历:dgb

先序遍历序列的第一个结点是根结点,所以可知b为a的左子树的根结点。

中序遍历序列的根结点在中间,其左边是左子树,右边是右子树。所以从中序遍历序列中可看出,根结点b的左子树是dg,没有右子树。

 

b的左子树:

(3)先序遍历:dg

中序遍历:dg

由先序遍历序列可知d为b的左子树的根结点。

中序遍历序列的根结点在中间,其左边是左子树,右边是右子树。所以从中序遍历序列中可看出,根结点d的右子结点是g。

 

a的右子树:

 

(4)先序遍历:cefh

中序遍历:echf

由先序遍历序列可知c为a的右子树的根结点。

从中序遍历序列中可看出,根结点c的左子结点是e,右子树是hf。

 

 

c的右子树:

(5)先序遍历:fh

中序遍历:hf

由先序遍历序列可知f为c的右子树的根结点。

从中序遍历序列中可看出,根结点f的左子结点是h,没有右子树。

树的结构如下:

二叉树的先序、中序、后序遍历序列

class Node: def __init__(self, dat, left=None, right=None): self.data = dat self.left = left self.right = right def rebuild(pre, center): if not pre: return cur = Node(pre[0]) index = center.index(pre[0]) cur.left = rebuild(pre[1:index + 1], center[:index]) cur.right = rebuild(pre[index + 1:], center[index + 1:]) return cur def post_order(t): if t == None: return post_order(t.left) post_order(t.right) print(t.data) if __name__ == "__main__": pre = ['a','b','d','g','c','e','f','h'] center = ['d','g','b','a','e','c','h','f'] t = rebuild(pre, center) post_order(t)

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/198917.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午2:14
下一篇 2026年3月26日 下午2:14


相关推荐

  • SLAM算法解析[通俗易懂]

    SLAM算法解析[通俗易懂]【嵌牛导读】:SLAM(SimultaneousLocalizationandMapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为「同步定位与地图构建」,它主要用于解决机器人在未知环境运动时的定位和地图构建问题。【嵌牛鼻子】:有人就曾打比方,若是手机离开了WIFI和数据网络,就像无人车和机器人,离开了SLAM一样。【嵌牛正文】:目前科技发展速度飞快,想让用户在AR/VR、机器人、无人机、无人驾驶领域体验加强,还是需要更多前沿技术做支持,SLAM就是其中之一。实际上

    2022年6月29日
    44
  • Python运算符优先级一览表

    Python运算符优先级一览表所有的数学运算都是从左向右进行的 Python 语言中的大部分运算符也是从左向右结合的 只有单目运算符 赋值运算符和三目运算符例外 它们是从右向左结合的 也就是说 它们是从右向左运算的 乘法和加法是两个可结合的运算符 也就是说 这两个运算符左右两边的操作数可以互换位置而不会影响结果 运算符有不同的优先级 所谓优先级就是在表达式运算中的运算顺序 表 1 中列出了包括分隔符在内的所有运算

    2026年3月17日
    2
  • PPP之PAP与CHAP经典验证案例

    PPP之PAP与CHAP经典验证案例

    2021年8月7日
    238
  • 最新VS2012激活成功教程 序列号,vs2012旗舰版密钥序列号【收藏】

    最新VS2012激活成功教程 序列号,vs2012旗舰版密钥序列号【收藏】对于开发者而言 一款优秀智能的开发工具能够提升应用开发的效率 正因为如此 VisualStudio 作为主流的开发工具 微软非常的用心 不仅能够让这款开发工具满足用户体验的需要 同时能够支持更多的新技术架构 并且 VS2012 更加适合用于开发 Windows8 专用程序 网上好多无效的 为了收藏 先保存一份 一 VS2012 下载地址 中文版 http download

    2026年3月18日
    3
  • C++ vector的用法(整理)

    C++vector的用法(整理)vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector是C++STL的一个重要成员,使用它时需要包含头文件:#include<vector>;一、vector的初始化:可以有五种方式,举例说明如下:(1)vector<int>a(10);//定义了10个整型元素…

    2022年4月4日
    42
  • oracle中拼接字符串_oracle 连接字符串

    oracle中拼接字符串_oracle 连接字符串1.listagg   该方法拼接后是varchar2类型,有最大长度限制,在OracleDatabase中,VARCHAR2字段类型,最大值为4000;PL/SQL中VARCHAR2变量类型,最大字节长度为32767。   适用场景:当要拼接的字符较少时使用。select’select’||col||’from’||table_name||’;’…

    2026年2月4日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号