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 的右子...