已知二叉樹的兩種遍歷求第三種遍歷。
已知前序和中序求後序,已知後序和中序求前序,這兩種解法網上有很多,但是已知前序和後序求中序的解法我沒找到,這裏寫一個自己的想法,有可能大家已經想到了我沒有搜索到而已
首先,我們看看前序、中序、後序遍歷的特性:
前序遍歷:
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
本文版權歸作者所有,未經許可不得轉載,否則保留追究法律責任的權利。