105.從前序與中序遍歷序列構造二叉樹
- 從前序與中序遍歷序列構造二叉樹
難度中等422
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
注意:
你可以假設樹中沒有重複的元素。
例如,給出
前序遍歷 preorder = [3,9,20,15,7] 中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3 / \ 9 20 / \ 15 7
遞歸
//1.前序遍歷的順序爲 根左右。
//2.map存儲中序遍歷 key爲值 value 爲index
Map<Integer,Integer> result = new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
for(int i=0;i<inorder.length;i++){
result.put(inorder[i],i);
}
return recur(preorder,0,preorder.length-1,0);
}
public TreeNode recur(int [] preorder,int preL,int preR,int inoL){
if(preL>preR) return null;
TreeNode root = new TreeNode(preorder[preL]);
int index = result.get(root.val);
int indexSize = index - inoL;
//重建左子樹
root.left = recur(preorder,preL+1,preL+indexSize,inoL);
//重建右子樹
root.right = recur(preorder,preL+1+indexSize,preR,inoL+indexSize+1);
return root;
}