思路:先序裡面,最先出現的是根節點,所以a就是根節點
中序裡面,根節點a在中間,所以a的左邊bdce是左子樹,a的右邊fhg是右子樹
先序裡面,a的左子樹b最先出現,所以b是左子樹的根節點
中序裡面,根節點b的左邊沒有結點,所以b的左子樹為空,即dce是b的右子樹
先序裡面,b的右子樹c最先出現,所以c是右子樹的根節點
中序裡面,d在c的左邊,e在c的右邊,所以d是c的左子樹,e是c的右子樹
至此,a的左子樹還原完畢
先序裡面,a的右子樹f最先出現,所以f是根節點
中序裡面,根節點f的左邊沒有結點,所以f的左子樹為空,即hg是f的右子樹
先序裡面,f的右子樹g最先出現,所以g是根節點
中序裡面,根節點g的左邊有結點h,所以h是g的左子樹
至此,a的二叉樹還原完畢
即原始二叉樹的後序為:d-e-c-b-h-g-f-a
後序裡面,最後出現的是根節點,所以a是根節點
中序裡面,根節點a在中間,所以a的左邊bdce是左子樹,a的右邊fhg是右子樹
後序裡面,a的左子樹b最後出現,所以b是左子樹的根節點
中序裡面,根節點b的左邊沒有結點,所以b的左子樹為空,b的右子樹是dce
後序裡面,b的右子樹c最後出現,所以c是根節點
中序裡面,根節點c的左邊是e,所以e是c的左子樹,c的右邊是e,所以e是c的右子樹
至此a的左子樹還原完畢
後序裡面,a的右子樹f最後出現,所以f是根節點
中序裡面,根節點f左邊沒有結點,所以f的左子樹為空,f的右子樹為hg
後序裡面,f的右子樹g最後出現,所以g是根節點
中序裡面,g的左子樹為h,g的右邊沒有結點,所以g的右子樹為空
至此,a的二叉樹還原完畢
所以先序為:a-b-c-d-e-f-g-h
通過這兩個例子不難發現,已知先序和中序或者中序和後序,進行還原二叉樹時需要不斷交替觀察結點在先序、中序或者中序、後序裡的位置,結合先序遍歷、中序遍歷、後序遍歷的特點,根據先序和後序能確定根節點,根據中序能判斷左右子樹的結點,這樣便能還原出原始的二叉樹。
由兩種遍歷序列確定二叉樹
已知中序和後序遍歷 typedef int elemtype typedef struct tnode position typedef position bintree typedef struct tnode bintree creat int a,int b,int n 陣列a,b分別存放中序...
根據兩種二叉樹遍歷方式,求二叉樹方法
如何根據已知兩種遍歷的序列,求原始的二叉樹?並不是已知道任意兩個序列都可以還原二叉樹,只有知道先序中序以及中序和後序兩種型別的遍歷順序才能還原二叉樹。只知道先序和後序是還原不了原始的二叉樹的。1 已知道先序和中序遍歷,還原二叉樹。已知道二叉樹的先序遍歷為abcdefgh,中序遍歷為bdceafhg,...
已知二叉樹的兩種遍歷,求另乙個遍歷
第一種 已知前序遍歷 中序遍歷求後序遍歷 前序遍歷 abcdef 中序遍歷 cbdaef 在進行分析前讀者需要知道不同遍歷結果的特點 1 前序遍歷的第一元素是整個二叉樹的根節點 2 中序遍歷中根節點的左邊的元素是左子樹,根節點右邊的元素是右子樹 3 後序遍歷的最後乙個元素是整個二叉樹的根節點 如果讀...