在我们动态的创建二叉树的时候,一般会选择#号法,本文主要是讲解为什么扩展二叉树的先序和后续都可以唯一确定一颗二叉树,而中序不可以。
我们在讲解扩展二叉树之前,先来回顾下,非扩展的二叉树,非扩展的二叉树,我们在已知前序,中序,后续任意一个遍历序列的时候,都是不能唯一确定一个二叉树的,因为如果知道前序和后续,只是知道哪个是跟结点,但是无法区分左右孩子,而知道了中序遍历,不知道头结点,区分左右子树也没有意义,
所以一定是前序+中序 或者后续+中序的组合才可以。
而扩展二叉树的意思是把一棵树的左右孩子都补全,用#号表示,这样的话代表每一个结点,除了补全的#结点,其他结点一定都有两个孩子,那这样的话
前序遍历 就相当于普通遍历的前序+中序 后续遍历 就相当于普通遍历的 后续+中序(具体原理后面分析)
前面是做了一些铺垫,现在言归正传,开始讲解,首先我们有如下的树结构:
然后我们对这棵二叉树进行扩展,形成扩展二叉树:如下图所示:
然后我们对扩展二叉树进行先(根)序遍历,得到结果如下:a b # d # # c # #
然后下面就是重点内容,为什么根据这个先序遍历,就可以唯一确定一个二叉树
继续分析扩展二叉树的后根序遍历,遍历结果如下:# # # d b # # c a
为什么根据这个先序遍历,就可以唯一确定一个二叉树呢,具体解释如下图所示: