二叉樹的先序,中序,後序遍歷

二叉樹的遍歷:
(1)先序遍歷:先訪問根節點然後是左孩子節點最後是右孩子節點即爲:根->左->右
(2)中序遍歷:先訪問左孩子節點然後是根節點最後是右孩子節點即爲:左->根->右
(3)後序遍歷:先訪問左孩子節點然後是右孩子節點最後是根節點即爲:左->右->根
對於每一個節點都是上面所述的順序遍歷(指的是根,左孩子,右孩子的訪問順序)
下面是求先序中序後序遍歷的樣例:
在這裏插入圖片描述
根據上圖先序遍歷的結果是:先看A(根節點){A}然後A的左邊,左邊第一個根節點是B把B加入到結果中{A B},然後是B的左孩子D{A B D}B沒有右孩子不用考慮,接着是D的左孩子G加入到結果中去{A B D G},左邊遍歷完畢考慮右邊第一個右邊節點是C(因爲C爲A的右孩子所以在考慮完A的左孩子之後自然該右孩子){A B D G C},接着考慮C的左孩子E{A B D G C E}該考慮E了但是E沒有孩子所以考慮C的右孩子F{A B D G C E F}遍歷完成!
中序遍歷和先序遍歷幾乎一樣只不過先考慮左孩子然後是根節點最後是右孩子,所以模擬一遍之後的結果應該是{G D B A E C F}
後序遍歷爲{G D B E F C A}

下面來介紹如何根據已知的兩種遍歷結果如何來寫另一種遍歷的結果和還原樹的形態;
例如一種樹的中序遍歷結果爲:D E B A C;後序遍歷結果爲:D A B E C;
求先序遍歷結果:
首先後序遍歷的最後一個元素肯定是根節點所以根節點爲C然後來到中序遍歷的結果裏面查找C所處的位置看完後會發現他只有左孩子(所有元素均在左邊)之後回到後序遍歷裏面下一個根節點就是緊挨着C的那一個所以E就是C的左孩子接下來繼續回看中序遍歷查看E所處的位置結果發現它的左邊是D無疑D就是它的左孩子右邊有兩個B和A這時候需要回到後序遍歷發現緊挨着的是B所以B是E的右孩子(因爲右孩子之後就是根節點所以B一定是E的右孩子)最後A就是B右孩子(這一個是在中序裏面看出來的B的左邊沒有A是在B的右邊的)
所以先序遍歷結果是{C E D B A}
樹的形狀建好之後就會是:
在這裏插入圖片描述
總結:在已知兩種遍歷順序求另一種的時候肯定會有一箇中序遍歷的順序是已經知道的因爲要查看一個節點的左孩子和右孩子分別是什麼;
還有一點就是先序遍歷和後序遍歷和上一個節點緊挨着的那一個肯定就是下一個根節點,下一步需要做的就是到中序遍歷裏面查看他所在的位置,以便於來確定他的左孩子和右孩子是誰(然後就是以他的左孩子或者右孩子作爲根節點來找下一個)也就是說中序和後序緊挨着上一個根節點的一定是下一個所求的根節點具體原因是先序和後序的遍歷順序根節點要麼是在最前面要麼就是最後面
下面是練習題目:
(1)已知一棵二叉樹的前序遍歷結ABCDE中序遍歷結果CBAED則後序遍歷的結果是:CBEDA
(2)已知某二叉樹的中序遍歷序列是D E B A C;後序遍歷結果爲:D A B E C先序遍歷的結果是C E D B A;

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