【树】由遍历序列确定的二叉树

在这里插入图片描述

:已知一棵二叉树的先序序列与中序序列分别为:
A B C D E F G H I
B C A E D G H F I
试构造该二叉树。

分析:
根据定义,二叉树的先序遍历是先访问根结点,其次再按先序遍历方式遍历根结点的左子树,最后按先序遍历方式遍历根结点的右子树。这就是说,在先序序列中,第一个结点一定是二叉树的根结点。如下图(a)所示。
另一方面,中序遍历是先遍历左子树,然后访问根结点,最后再遍历右子树。这样,根结点在中序序列中必然将中序序列分割成两个子序列,前一个子序列是根结点的左子树的中序序列,而后一个子序列是根结点的右子树的中序序列。如下图(b)所示

在这里插入图片描述

根据这两个子序列,在先序序列中根据中序序列对应的左子树的先序序列和右子树的先序序列。在先序序列中,左子序列的第一个结点是左子树的根结点,右子序列的第一个结点是右子树的根结点。这样,就确定了二叉树的三个结点。同时,左子树和右子树的根结点又可以分别把左子序列和右子序列划分为两个子序列,如此递归下去,当取尽先序序列中的结点时,便可以得到一棵二叉树。

具体到本题目,首先由先序序列可知,结点 A 是二叉树的根结点。其次,根据中序序列,在 A 之前的所有结点都是根结点左子树的结点,在 A 之后的所有结点都是根结点右子树的结点,由此得到下图(a)所示的状态。然后再对左子树进行分解,得知 B 是左子树的根结点,又从中序序列知道,B 的左子树为空,B 的右子树只有一个结点 C。接着对 A 的右子树进行分解,得知 A 的右子树的根结点为 D;而结点 D 把其余结点分成两部分,即左子树为 E,右子树为 F、G、H、I,如下图(b)所示。接下去的工作就是按上述原则对 D 的右子树继续分解下去,最后得到如下图(c)所示的整棵二叉树。

在这里插入图片描述

发布了26 篇原创文章 · 获赞 0 · 访问量 647
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览