已知二叉樹前序、後序遍歷如何求中序

     已知二叉樹的兩種遍歷求第三種遍歷。

     已知前序和中序求後序,已知後序和中序求前序,這兩種解法網上有很多,但是已知前序和後序求中序的解法我沒找到,這裏寫一個自己的想法,有可能大家已經想到了我沒有搜索到而已微笑

     首先,我們看看前序、中序、後序遍歷的特性: 
前序遍歷: 
    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
 本文版權歸作者所有,未經許可不得轉載,否則保留追究法律責任的權利。 

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