前序遍歷的特點:根節點–左子樹–右子樹
中序遍歷的特點:左子樹–根節點–右子樹
例如:
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
在前序遍歷結果中可以找到:這棵樹的根 為 3;
再去中序中,可以分辨出9為3的左子樹內容,15、20、7為3的右子樹內容;
遞迴去構造3的左子樹,3的右子樹。
注意一定要給出子樹的範圍區間。
中序遍歷 inorder = [ 9 , 3 , 15 , 20 , 7 ]
left right
1.從前序遍歷中找根;
2.在中序遍歷結果中找根的位置inrootidx,
左子樹的所有節點區間【left,inrootidx-1】;
右子樹的所有節點區間【inrootidx+1,,right】;
3.遞迴建立左子樹和右子樹。
class
solution
treenode root=
newtreenode
(preorder[index]);
int inrootidx=left;
//在中序結果中找到個根節點下標
while
(inrootidx<=right)
inrootidx++;}
index++
;//遞迴構造左子樹
root.left=
buildtree
(preorder,inorder,left,inrootidx-1)
;//遞迴構造右子樹
root.right=
buildtree
(preorder,inorder,inrootidx+
1,right)
;return root;
}public treenode buildtree
(int
preorder,
int[
] inorder)
}
根據前序遍歷和中序遍歷得出後序遍歷
首先要明確前序,中序和後序的遍歷順序 前序 父節點,左子節點,右子節點 中序 左子節點,父節點,右子節點 後序 左子節點,右子結點,父節點 明確之後,首先根據前序遍歷,確定整個二叉樹的根節點 前序的第乙個節點 再通過中序遍歷,可以直接根據根節點將整個二叉樹分為左右兩顆子樹.這時再逐步根據前序和中序順...
根據前序遍歷和中序遍歷樹構造二叉樹
根據前序遍歷和中序遍歷樹構造二叉樹.樣例給出中序遍歷 1,2,3 和前序遍歷 2,1,3 返回如下的樹 2 1 3 假設樹中不存在相同數值的節點 definition of treenode class treenode class solution treenode helper vector p...
C 根據 前序 中序遍歷輸出後序遍歷
include include void printt char pred,int pre start,int pre end,char inod,int in start,int in end intmain void printt char pred,int pre start,int pre ...