概要
前序遍歷:先訪問當前節點,再訪問當前節點的左子樹,最後訪問當前節點的右子樹。對於二叉樹,深度遍歷與此同。規律:根在前;子樹在根後且左子樹比右子樹靠前,且第一個就是根節點;
中序遍歷:先訪問當前節點的左子樹,然後訪問當前節點,最後是當前節點的右子樹,二叉樹,中序遍歷會得到數據升序效果。規律:根在中;左子樹在跟左邊,右子樹在根右邊,左邊部分是根結點的左子樹的中序遍歷序列,右邊部分是根結點的右子樹的中序遍歷序列 ;
後序遍歷:先訪問當前節點的左子樹,然後是當前節點的又子樹,最後是當前節點。規律:根在後;子樹在根前且左子樹比右子樹靠前,且最後一個節點是根節點。
注:只能根據前序和中序或者中序和後序還原二叉樹,也就是說必須要有中序。
關鍵:(1)從前序中可以得知第一個結點是根節點。(2)根據後序可以得知最後一個結點是根節點。(3)根據中序或後序得知的根節點在中序中得到其左右子樹。
前序和中序求後序及二叉樹
解題思路如下:
- 根據前序序列的第一個元素建立根結點;
- 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
- 在前序序列中確定左右子樹的前序序列;
- 由左子樹的前序序列和中序序列建立左子樹;
- 由右子樹的前序序列和中序序列建立右子樹。
以下題爲例:已知一棵二叉樹的先序遍歷序列和中序遍歷序列分別是abdgcefh、dgbaechf,求二叉樹及後序遍歷序列。
圖解如下:
後序和中序求前序及二叉樹
解題思路如下:
- 根據後序序列的最後一個元素建立根結點;
- 在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
- 在後序序列中確定左右子樹的後序序列;
- 由左子樹的後序序列和中序序列建立左子樹;
- 由右子樹的後序序列和中序序列建立右子樹
以下題爲例:已知一棵二叉樹的後序遍歷序列和中序遍歷序列分別是gdbehfca、dgbaechf,求二叉樹及先序遍歷。
圖解如下: