package leetcode;
import java.util.HashMap;
public class demo_106 {
public TreeNode buildTree(int[] inorder, int[] postorder) {
HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
//存储每个节点在中序遍历中的位置
for(int i=0;i<inorder.length;i++) {
map.put(inorder[i], i);
}
return myBuildTree(inorder, postorder, map, 0, inorder.length-1, 0, postorder.length-1);
}
public TreeNode myBuildTree(int[] inorder, int[] postorder,HashMap<Integer, Integer> map,int inleft,int inright,int postleft,int postright) {
if(inright<inleft) {
return null;
}
int val=postorder[postright];
//找到根节点的位置
int location=map.get(val);
//左子树的个数
int leftTreeSize=location-inleft;
//创建一个新的节点
TreeNode root=new TreeNode(val);
//创建左子树
root.left=myBuildTree(inorder, postorder, map, inleft, location-1, postleft, postleft+leftTreeSize-1);
//创建右子树
root.right=myBuildTree(inorder, postorder, map, location+1, inright, postleft+leftTreeSize, postright-1);
return root;
}
}