資料結構 樹 樹的前序 中序 後序遍歷詳解

2021-10-05 15:06:39 字數 991 閱讀 2550

zlingyun

遍歷是針對根節點的

前序遍歷順序:根節點--左子樹--右子樹, 根左右

中序遍歷順序:左子樹--根節點--右子樹, 左根右

後序遍歷順序:左子樹--右子樹--根節點, 左右根

深入一點去理解這個排序順序是這樣的

前序遍歷首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。

中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,再訪問根結點,最後遍歷右子樹。

後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後訪問根節點。在遍歷左、右子樹時,仍然先遍歷左子樹,再遍歷右子樹,最後訪問根結點。

也就是說我們在遍歷的時候必然是一層一層去尋找,並且不斷遞迴。

說明已知前序遍歷與中序遍歷,可確定唯一二叉樹;

已知中序遍歷與後序遍歷,可確定唯一二叉樹;

但是已知前序遍歷與後序遍歷,無法確定唯一二叉樹。

確定唯一二叉樹

舉個例子來看懂樹的排序

如果我們已知中序遍歷是dbeafc,前序遍歷是abdecf,求後序遍歷。

解:根據前序遍歷abdecf,a肯定是根節點(第乙個遍歷根節點)。對照中序遍歷,就能知道dbe是左子樹,fc是右子樹。

左子樹:中序dbe,前序是bde;說明b是左子樹的根節點,d是b的左孩子,e是右孩子。

右子樹類似:c是右子樹的根節點,f是c的左孩子(因為中序遍歷中f是在c前面的,所以一定是左孩子;如果f在c的後面,就是右孩子)

後序遍歷debfca

所以我們已知樹去寫三種不同的遍歷的時候,就是不斷的把樹拆分成左子樹,根節點,右子樹,一級一級的拆分下去。最終獲得最小的二叉樹,可以輕易的寫出來順序。

或者我們已知兩種遍歷結果(前提是可以唯一確定二叉樹),我們根據前序遍歷或者後續遍歷可以立即得到根節點是什麼,根據根節點將中序遍歷拆分,立即獲得左子樹與右子樹內容。在一級一級的拆分下去。可獲得完整的二叉樹結構。

演算法程式:

樹的前序 中序 後序遍歷

樹的前序 中序 後序遍歷 遞迴方法 ab c 樹的結構定義 struct treenode typedef treenode node typedef int eletype struct treenode 1 前序遍歷 先序遍歷,就是從上到下,從左到右,遇到乙個就遍歷,上面這個例子遍歷的序列就是 ...

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

圖1對於當前節點,先輸出該節點,然後輸出他的左孩子,最後輸出他的右孩子。以上圖為例,遞迴的過程如下 1 輸出 1,接著左孩子 2 輸出 2,接著左孩子 3 輸出 4,左孩子為空,再接著右孩子 4 輸出 6,左孩子為空,再接著右孩子 5 輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子...

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

圖1對於當前節點,先輸出該節點,然後輸出他的左孩子,最後輸出他的右孩子。以上圖為例,遞迴的過程如下 1 輸出 1,接著左孩子 2 輸出 2,接著左孩子 3 輸出 4,左孩子為空,再接著右孩子 4 輸出 6,左孩子為空,再接著右孩子 5 輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子...