後序遍歷的特點:左子樹–右子樹–根節點
中序遍歷的特點:左子樹–根節點–右子樹
例如:
後序遍歷 postorder = [7,15,20,9,3]
中序遍歷 inorder = [9 ,3,15,20,7]
在後序遍歷結果中可以找到:這棵樹的根 為 3(index=postorder.length-1);
再去中序中,可以分辨出9為3的左子樹內容,15、20、7為3的右子樹內容;
遞迴構造3的右子樹,3的左子樹。
這裡先構造右子樹是因為:
從後序遍歷結果陣列的末尾開始構造樹,
所以先拿到根節點,然後是右子樹,最後是左子樹。
注意一定要給出子樹的範圍區間。
中序遍歷 inorder = [ 9 , 3 , 15 , 20 , 7 ]
left right
1.從後序遍歷中找根;
2.在中序遍歷結果中找根的位置inrootidx,
右子樹的所有節點區間【inrootidx+1,,right】;
左子樹的所有節點區間【left,inrootidx-1】;
3.遞迴建立右子樹和左子樹。
class
solution
treenode root=
newtreenode
(postorder[index]);
int inrootidx=left;
//在中序結果中找到個=根節點下標
while
(inrootidxinrootidx++;}
index--
;//遞迴構造右子樹
root.right=
buildtree
(inorder,postorder,inrootidx+
1,right)
;//遞迴構造左子樹
root.left=
buildtree
(inorder,postorder,left,inrootidx)
;return root;
}public treenode buildtree
(int
inorder,
int[
] postorder)
}
根據後序和中序遍歷輸出先序遍歷
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數nn le 30 30 是樹中結點的個數。隨後兩行,每行給出nn個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以...
根據後序和中序遍歷輸出先序遍歷
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...
根據後序和中序遍歷輸出先序遍歷
n 是樹中結點的個數。隨後兩行,每行給出 n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。7 2 3 1 5 7 6 4 1 2 3 4 5 6 7preorder 4 1 3 2 6 5 7 思路 一.根據後序遍歷和中序遍歷建樹 1.二叉鍊錶結構的定義 ...