樹的前序遍歷 中序遍歷 後序遍歷詳解

2022-06-23 08:57:10 字數 2686 閱讀 6402

圖1對於當前節點,先輸出該節點,然後輸出他的左孩子,最後輸出他的右孩子。以上圖為例,遞迴的過程如下:

(1):輸出 1,接著左孩子;

(2):輸出 2,接著左孩子;

(3):輸出 4,左孩子為空,再接著右孩子;

(4):輸出 6,左孩子為空,再接著右孩子;

(5):輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子樹為空,此時 1 的左子樹全部輸出,接著 1 的右子樹;

(6):輸出 3,接著左孩子;

(7):輸出 5,左右孩子為空,此時 3 的左子樹全部輸出,3 的右子樹為空,至此 1 的右子樹全部輸出,結束。

對於當前結點,先輸出它的左孩子,然後輸出該結點,最後輸出它的右孩子。以上圖為例:

(1):1-->2-->4,4 的左孩子為空,輸出 4,接著右孩子;

(2):6 的左孩子為空,輸出 6,接著右孩子;

(3):7 的左孩子為空,輸出 7,右孩子也為空,此時 2 的左子樹全部輸出,輸出 2,2 的右孩子為空,此時 1 的左子樹全部輸出,輸出 1,接著 1 的右孩子;

(4):3-->5,5 左孩子為空,輸出 5,右孩子也為空,此時 3 的左子樹全部輸出,而 3 的右孩子為空,至此 1 的右子樹全部輸出,結束。

對於當前結點,先輸出它的左孩子,然後輸出它的右孩子,最後輸出該結點。依舊以上圖為例:

(1):1->2->4->6->7,7 無左孩子,也無右孩子,輸出 7,此時 6 無左孩子,而 6 的右子樹也全部輸出,輸出 6,此時 4 無左子樹,而 4 的右子樹全部輸出,輸出 4,此時 2 的左子樹全部輸出,且 2 無右子樹,輸出 2,此時 1 的左子樹全部輸出,接著轉向右子樹;

(2):3->5,5 無左孩子,也無右孩子,輸出 5,此時 3 的左子樹全部輸出,且 3 無右孩子,輸出 3,此時 1 的右子樹全部輸出,輸出 1,結束。

已知:前序遍歷: gdafemhz

中序遍歷: adefghmz

求後序遍歷

首先,要先畫出這棵二叉樹,怎麼畫呢?根據上面說的我們一步一步來……

1.先看前序遍歷,前序遍歷第乙個一定是根節點,那麼我們可以知道,這棵樹的根節點是g,接著,我們看中序遍歷中,根節點一定是在中間訪問的,那麼既然知道了g是根節點,則在中序遍歷中找到g的位置,g的左邊一定就是這棵樹的左子樹,g的右邊就是這棵樹的右子樹了。

2.我們根據第一步的分析,大致應該知道左子樹節點有:adef,右子樹的節點有:hmz。同時,這個也分別是左子樹和右子樹的中序遍歷的序列。

3.在前序遍歷遍歷完根節點後,接著執行前序遍歷左子樹,注意,是前序遍歷,什麼意思?就是把左子樹當成一棵獨立的樹,執行前序遍歷,同樣先訪問左子樹的根,由此可以得到,左子樹的根是d,第2步我們已經知道左子樹是adef了,那麼在這一步得到左子樹的根是d,請看第4步。

4.從第2步得到的中序遍歷的節點序列中,找到d,發現d左邊只有乙個a,說明d的左子樹只有乙個葉子節點,d的右邊呢?我們可以得到d的右子樹有ef,再看前序遍歷的序列,發現f在前,也就是說,f是先前序遍歷訪問的,則得到e是f的左子樹,只有乙個葉子節點。

5.到這裡,我們可以得到這棵樹的根節點和左子樹的結構了。如下圖:

6.接著看右子樹,在第2步的右子樹中序遍歷序列中,右子樹是hmz三個節點,那麼先看前序遍歷的序列,先出現的是m,那麼m就是右子樹的根節點,剛好,hz在m的左右,分別是它的左子樹和右子樹,因此,右子樹的結構就出來了:

7.到這裡,我們可以得到整棵樹的結構:

中序遍歷:adefghmz

後序遍歷:aefdhzmg

1..根據後序遍歷的特點(左右中),根節點在結尾,確定g是根節點。根據中序遍歷的特點(左中右),確定adef組成左子樹,hmz組成右子樹。

2.分析左子樹。adef這四個元素在後序遍歷(左右中)中的順序是aefd,在中序遍歷(左中右)中的順序是adef。根據後序遍歷(左右中)的特點確定d是左子樹的節點,根據中序遍歷(左中右)的特點發現a在d前面,所以a是左子樹的左葉子,ef則是左子樹的右分枝。

ef在後序(左右中)和中序(左中右)的相對位置是一樣的,所以ef關係是左右或者左中,排除左右關係(缺乏節點),所以ef關係是左中。

到此得出左子樹的形狀

3.分析右子樹。hmz這三個元素在中序遍歷(左中右)的順序是hmz,在後序遍歷(左右中)的順序是hzm。根據後序遍歷(左右中)的特點,m在尾部,即m是右子樹的節點。再根據中序遍歷(左中右)的特點,確定h(m的前面)是右子樹的左葉子,z(m的後面)是右子樹的右葉子。

所以右子樹的形狀

最後得出整棵樹的形狀

前序遍歷 中序遍歷 後序遍歷

只要是搞計算機的,對資料結構中二叉樹遍歷都不陌生,但是如果用到的機會不多那麼就會慢慢淡忘,溫故而之新才是最好的學習方式,現在就重新溫習一下這方面的知識。首先我想先改變這幾個遍歷的名字 前根序遍歷,中根序遍歷,後根序遍歷 前中後本來就是相對於根結點來說的,少乙個字會產生很多不必要的誤解。1.前根序遍歷...

前序遍歷 中序遍歷 後序遍歷

遍歷是針對根節點的 前序遍歷順序 根節點 左子樹 右子樹 中序遍歷順序 左子樹 根節點 右子樹 後序遍歷順序 左子樹 右子樹 根節點 深入一點去理解這個排序順序是這樣的 前序遍歷 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。中...

前序遍歷 中序遍歷 後序遍歷

前序遍歷 dlr 前序遍歷也叫做先根遍歷 先序遍歷,可記做根左右。前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。若二叉樹 為空則結束返回,否則 1 訪問根結點。2 前序遍歷左子樹。3 前序遍歷右子樹 需要注意的是 遍歷左右...