本節主要介紹如何根據二叉樹的遍歷序列還原二叉樹
1.根據前序遍歷序列ABCDEF和中序遍歷序列CBAEDF如何判斷還原二叉樹
(1)根節點:
? ?首先根據前序序列的第一個字母A確定根節點;
(2)確定左右子樹的序列元素:
? ?根據中序序列確定左子樹的序列是C、B,右子樹的序列是E、D、F
(3)確定左子樹:
根據前序序列ABC順序判斷B是A的左子樹的根節點,但是不能判斷C是B的左子節點還是右子節點;
根據中序序列CBA順序確定C是B的左子節點
(4)確定右子樹:
根據前序序列DEF順序確定D是A的右子樹的根節點,E是D的子節點,但不知道是左子節點還是右子節點,也不清楚F是D的子節點還是孫子節點;
根據中序序列EDF順序確定E是D的左子節點,F是D的右子節點
綜上即確定了二叉樹,然后我們可以確定后序遍歷序列是CBEFDA
2.根據中序遍歷序列ABCDEFG和后序遍歷序列BDCAFGE還原二叉樹
(1)確定根節點:
根據后序序列的最后一個元素是E確定E是根節點
(2)確定左右子樹的序列元素
根據中序序列以E為分割點確定左子樹序列是ABCD,右子樹序列是FG
(3)確定左子樹
根據后序序列BDCA確定最后一個元素A是左子樹的根節點,C是A的子節點,但不能確定是左節點還是右節點,BD是C的子孫,但不能確定都是兒子或有一個是孫子;
根據中序序列ABCD確定BCD是A的右子樹,即C是A的右子節點;且B是C的左子節點,D是C的右子節點
(4)確定右子樹
根據后序序列FGE確定G是E的右子樹的根節點,F是G的子節點,但不知道是左子節點還是右子節點;
根據中序序列EFG確定F是左子節點
綜上即確定了二叉樹,得到前序序列是EACBDGF
3.總結
(1)綜合上面的兩種情況:可以把還原二叉樹的過程看做四個步驟:
確定根節點:根據前(后)序序列的第一位(最后一位)確定根節點;
確定左右子樹元素:根據中序序列確定左右子樹的元素;
確定左子樹:先根據前(后)序序列確定左子樹的根節點及其子節點,然后根據中序序列確定左子樹的剩余元素的位置;
確定右子樹:先根據前(后)序序列確定右子樹的根節點及其子節點,然后根據中序序列確定右子樹的剩余元素的位置
(2)二叉樹遍歷的性質:
已知前序遍歷序列和中序遍歷序列可以唯一確定一棵二叉樹;
已知后序遍歷序列和中序遍歷序列可以唯一確定一棵二叉樹;
已知前序序列和后序序列是不能確定一棵二叉樹的,因為只能確定根節點,而無法確定其余元素的位置