我们都知道,如果已知一棵二叉树的先序和中序序列或者中序和后序序列,都可以得到唯一的一棵二叉树。
大家有时候会对二叉树的序列问题很是烦恼,不知道从何下手,我也有过同样的经历,看着那两趟密密麻麻的字母不知道该怎么办,做一道普通难度的题大概需要十分钟,这样的效率着实让人抓狂。之后耐下心来好好研究了一下,发现这里边还是有窍门的,不像之前想的那样呆板无力,那么我就把自己学习的一点小小的心得跟大家分享一下,希望能对一些同学有所帮助……
ok,直接杀入主题,假设我们知道一棵二叉树的先序序列为abdfghce,中序序列为bfdhgaec,那么怎么画出这棵二叉树呢?首先我们都知道的是先序序列遍历顺序为“根左右”,中序序列为“左根右”,那么我们来看先序序列,第一个‘a’即为二叉树的根结点,再看中序,一个‘a’将其一分为二,左边为左子树,右边为右子树,这样的话这棵二叉树的大体框架就出来了。
然后我们进入它的左子树,先序序列“bdfgh”,中序序列“bfdhg”,继续由前者确定它的根为‘b’,再一看中序,有同学蒙了,不是“左根右”吗,怎么第一个是根,这就说明在以‘b’为根结点的二叉树中是没有左子树的,于是乎也就确定了它的大体结构,‘b’为根结点,无左子树,右子树先序序列为“dfgh”,中序序列为“fdhg”,再进入它的右子树,又是一棵崭新的二叉树,根据前边的经验可知它的根结点为‘d’,左孩子(准确的说是左子树,因其只有一个结点,故已确定其位置)是‘f’,右子树先序序列为“gh”,中序序列为“hg”,所以在右子树中根结点为‘g’,左孩子为‘h’,没有右孩子。这样以‘a’为根结点的二叉树的左子树已经确定,右子树就简单了,可以判定‘c’为其右孩子,‘e’为以‘c’为根结点的二叉树的左孩子。
至此这棵二叉树就被唯一地确定了:
ps:如果已知中序和后序序列也可根据以上步骤得到唯一的二叉树。