现在的位置: 首页 > 综合 > 正文

二叉树 遍历

2013年10月22日 ⁄ 综合 ⁄ 共 1122字 ⁄ 字号 评论关闭

参考:http://itcome.blog.51cto.com/1541534/1015034

二叉树、满二叉树、完全二叉树、平衡二叉树

什么是平衡二叉树?

左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。

前序遍历:根节点->左孩子->右孩子

中序遍历:左孩子->根节点->右孩子

后序遍历:左孩子->右孩子->根节点

命名是根据访问根节点的顺序而定的。

一:笔试题描述

    1:有一颗二叉树:前序遍历输出的字符串顺序为:ABCDEFG

                                   中序遍历输出的顺序是:CBDAEGF

   2:问?请根据前序和中序遍历出的结果,推断出后序遍历输出的结果?

 二:解决以上问题依据的知识点如下:

      二叉树三种遍历的方式:

           前序遍历(NLR): 根->左孩子->右孩子

         中序遍历(LNR):  左孩子->根->右孩子

         后序遍历(LRN):  左孩子->右孩子->根

 三:问题分析

  第一步:前序:ABCDEFG

                  根据前序遍历的原则我们可以确定:二叉树的根元素为:A

第二步:根据中序 CBDAEGF

1:原则:左孩子->根->右孩子

2:推出:CBD(根左边的元素)  A(根元素)  EGF(根右边的元素)

 

 第三步:根据 前序和中序输出的结果来还原一棵二叉树

   前序输出:A(根)  BCD(左边元素) EFG(右边的元素)

   根据前序遍历的原则:根->左孩子->右孩子

   推出:如下图:

 

 第四步:B元素后面是C元素,C元素有二种可能1:B的左孩子2:B的右孩子

   我们假设C是B的右孩子:得到如下图:

 

验证:我们来看看中序:CBD(左边元素)   A(根)    EGF(右边元素) 

            中序的遍历规则是: 左孩子->根->右孩子,如果按照上面的假设C是B的右孩子

            中序遍历时应该是:BC..显然不对,因此C应该是B的左孩子.因此进一步得出如下:

第五步: 根据前序:A(根) BCD(根左边的元

素)  EFG(根右边的元素)

 

分析:

C元素后面紧跟是D元素

D元素现在有三种可能:B的右孩子,C的左孩子或者右孩子

 

1:如果D是C的左孩子,图下图:

 

 

验证:

1:如果D是C的右孩子,那么中序遍历根的左边应该是:DCB与中序CBD不相符合,所以不对
2:如果是右孩子:中序遍历,根的左边应该是:CDB与CBD也不相符合,所以不对

3:综上得出D应该是B的右孩子,如下图:

 

第六步:根据以上的思路,我可以把根的右边也还原,得出完整的二叉树结构如下:

 

 

 

第七步:根据后序遍历:左孩子->右孩子->根的遍历原则:

             因此很容易得出后序为:CDBGFEA

所以最终答案 为:CDBGFEA

抱歉!评论已关闭.