题目描述:
代码如下:
class Solution {
int [] preorder;//用来传参
HashMap<Integer, Integer> map = new HashMap<>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.preorder=preorder;
for (int i = 0; i < inorder.length; i++) {
map.put(inorder[i],i);//key={节点,对应索引的值}
}
//三个索引分别为
//当前根的的索引
//递归树的左边界,即数组左边界
//递归树的右边界,即数组右边界
return reBuild(0, 0, inorder.length-1);
}
TreeNode reBuild(int root,int leftEdge,int rightEdge){
if(leftEdge>rightEdge){
return null;
}
TreeNode treeNode = new TreeNode(preorder[root]);
int index=map.get(preorder[root]);
treeNode.left=reBuild(root+1, leftEdge, index-1);
treeNode.right=reBuild(root+1+index-leftEdge, index+1, rightEdge);
return treeNode;
}
}