已知二叉树前序、后序遍历如何求中序

     已知二叉树的两种遍历求第三种遍历。

     已知前序和中序求后序,已知后序和中序求前序,这两种解法网上有很多,但是已知前序和后序求中序的解法我没找到,这里写一个自己的想法,有可能大家已经想到了我没有搜索到而已微笑

     首先,我们看看前序、中序、后序遍历的特性: 
前序遍历: 
    1.访问根节点 
    2.前序遍历左子树 
    3.前序遍历右子树 
中序遍历: 
    1.中序遍历左子树 
    2.访问根节点 
    3.中序遍历右子树 
后序遍历: 
    1.后序遍历左子树 
    2.后序遍历右子树 
    3.访问根节点

   思路:把后序的遍历结果做一下颠倒,那么结果就是

    1.访问根节点
    2.后序遍历右子树 
    3.后序遍历左子树 

    根据这个结果和前序结果比较求出结果。


例如:一个已知二叉树的前序遍历为:abdghcef,后序遍历为:ghdbefca  求中序遍历的结果.

解法:将后序的遍历结果颠倒过来就是acfebdhg

我们把前序遍历的结果命名(1):abdghcef  颠倒过来的命名为(2):acfebdhg

1.很明显根节点是a,

2.从(1)的结果看a紧跟着的是b开头的左子树

3.从(2)的结果看a后面紧跟着的是c开头的右子树

那么属于左子树的应该为bdgh 属于右子树的应该是cfe

我们又有左子树的前序遍历(3):bdgh  颠倒的遍历(4):bdhg

重复上面的步骤可以继续拆分为更小的单位。


当然结果有时候不唯一,这是已知条件决定的。




 作者:crimson_pig
 出处:http://blog.csdn.net/crimson_pig/article/details/78568500
 本文版权归作者所有,未经许可不得转载,否则保留追究法律责任的权利。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章