/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.*;
public class Solution {
private HashMap<Integer,Integer> hashMap=new HashMap<>();
public TreeNode reConstructBinaryTree(int [] pre,int [] in) {
for (int i=-0;i<in.length;i++) //利用map存储 中序遍历,方便每次取出树顶点,获取左右子树长度。
hashMap.put(in[i],i);
return reConstruct(pre,0,pre.length-1,0);
}
public TreeNode reConstruct(int []pre,int preLt,int preRt,int RtL){
if(preLt>preRt)
return null;
TreeNode root=new TreeNode(pre[preLt]);
int index=hashMap.get(root.val);
int ltLength=index-RtL; //左子树长度
root.left=reConstruct(pre,preLt+1,preLt+ltLength,RtL); //左子树递归
root.right=reConstruct(pre,preLt+ltLength+1,preRt,RtL+ltLength+1);//右子树递归
return root;
}
}