根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
注意:你可以假設樹中沒有重複的元素。
例如,給出
中序遍歷 inorder = [9,3,15,20,7]
後序遍歷 postorder = [9,15,7,20,3]
返回如下的二叉樹:
1、遞迴思路
/**
* definition for a binary tree node.
* public class treenode
* }*/class
solution
return
buildtree
(map,
0, inlen -
1, postorder,
0, postlen -1)
;}/** *
* @param map 後序遍歷hash(key為節點值,value為下標)
* @param inleft 樹中序遍歷開始下標
* @param inright 樹中序遍歷結束下標
* @param postorder 後序遍歷
* @param postleft 樹後序遍歷開始下標
* @param postright 樹後序遍歷結束下標
* @return
*/public treenode buildtree
(map
map,
int inleft,
int inright,
int[
] postorder,
int postleft,
int postright)
// 根節點值
int pivot = postorder[postright]
;// 構建目標樹
treenode root =
newtreenode
(pivot)
;// 獲取根節點在中序遍歷中的下標
int pivotindex = map.
get(pivot)
;// 構建左子樹
root.left =
buildtree
(map, inleft, pivotindex -1,
postorder, postleft, postleft +
(pivotindex - inleft)-1
);// 構建右子樹
root.right =
buildtree
(map, pivotindex +
1, inright,
postorder, postleft +
(pivotindex - inleft)
, postright -1)
;return root;
}}
從中序與後序遍歷序列構造二叉樹
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7因為後序遍歷的順序是 左,右,根 最後乙個節點總是根節點,而中序遍...
從中序與後序遍歷序列構造二叉樹
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree nod...
從中序與後序遍歷序列構造二叉樹
根據一棵樹的中序遍歷與後序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 中序遍歷 inorder 9,3,15,20,7 後序遍歷 postorder 9,15,7,20,3 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree nod...