根据前序中序构建树
复习递归写法,不断缩小数组
关于Treenode的返回值不理解,暂存
还有java里这个this.preorder = preorder为什么这么操作?
理解:因为LeetCode给的题解在函数里,后面的递归也是个单独的函数,这两个数组
想做全局变量应用,所以需要声明然后重新赋值
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);
}
return recur(0,0,inorder.length-1);
}
TreeNode recur(int pre_root, int in_left, int in_right){
if(in_left > in_right) return null;
TreeNode root = new TreeNode(preorder[pre_root]);
int idx = map.get(preorder[pre_root]);
root.left = recur(pre_root+1,in_left,idx-1);
root.right = recur(pre_root + (idx-in_left) + 1,idx+1,in_right);
return root;
}
}