package leetcode;
import java.util.HashMap;
public class demo_105 {
public TreeNode buildTree(int[] preorder, int[] inorder) {
HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
//保留节点在中序遍历中的位置
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i], i);
}
return myBuildTree(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1, map);
}
public TreeNode myBuildTree(int[] preorder,int[] inorder,int preleft,int preright,int inleft,int inright,HashMap<Integer, Integer> map ) {
if(preleft>preright) {
return null;
}
//先序遍历中根节点的位置
int preroot=preleft;
//中序遍历中根节点的位置
int inroot=map.get(preorder[preroot]);
int lefttree=inroot-inleft;
//创建出根节点
TreeNode root=new TreeNode(preorder[preroot]);
//创建出左子树
root.left=myBuildTree(preorder, inorder, preleft+1, preleft+lefttree, inleft, inroot-1, map);
//创建出右子树
root.right=myBuildTree(preorder, inorder, preleft+lefttree+1 , preright, inroot+1 ,inright, map);
return root;
}
}