确定一颗二叉树
我们知道遍历二叉树的办法有三种:
先序遍历,中序遍历,和后序遍历
他们的关键就是根节点被访问的顺序
然后我们直入主题:
如何通过这三种顺序来确定一棵二叉树呢?
我们只需要直到其中两种
(当然知道所有更行A.A)
具体是那两种?
经过研究发现,①我们知道先序遍历的结果和中序遍历的结果
或者②知道中序遍历的结果和后续遍历的结果
就可以确定一颗二叉树
为什么中序遍历不可缺
为什么不能是知道先序和后序可以确定呢?
我们从二叉树的结构下手
根 左子树右子树
所以除了根就是分成两部分对吧
中序遍历就可以看出是分成哪两部分所以它是关键
好了知道这个我先列出我对于如何根据①②还原整棵二叉树的做法:
一共分为两步 重复执行 直到树还原为止
A.找根
B.找子树
下面通过例子来说明吧。
已知中序:BDCEAFHG
已知后序:DECBHGFA
我们首先来找根,如何找根?通过后序遍历的特点我们可以得出A是最后访问的,所以A就是整棵树的根
然后找子树,我们知道A是根以后,通过中序遍历的结果和中序遍历的特点我们可以看出,排在A左边的BDCE构成了A的左子树,FHG构成了A的右子树
接下来我们找左子树的根,根据后序遍历我们可以知道 BDCE中B是最后一个出现的,所以B是左子树的根
然后根据中序遍历的特点和结合中序结果可知,B只有右子树,右子树的根就是C(C在后序中排靠后),然后我们再看中序结果和中序特点易得,D是C的左儿子,E是C的右儿子。
然后我们找右子树的根,根据后序结果我们知道F是右子树的根,然后F左边是A 结合中序特点知F只有右子树,然后G是右子树的根,根据中序特点知道H是G的左儿子
由此我们便还原了这个二叉树
好了 模拟完这个过程你应该知道其中的套路了
后序无非就是找后面出现的来确定根
那么先序就是找前面出现的
所以下面先序的例子需要你自己动手模拟了
已知先序:ABDFCEGH
已知中序:BFDAGEHC