思路:递归,如图:
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
int preLen = preorder.length;
int inLen = inorder.length;
Map<Integer, Integer> inMap = new HashMap<>();
for(int i = 0; i < inLen; i++) {
inMap.put(inorder[i], i);
}
TreeNode root = buildTree(preorder, 0, preLen - 1, inMap, 0, inLen - 1);
return root;
}
}
private TreeNode buildTree(int[] preorder, int preLeft, int preRight, Map<Integer, Integer> inMap, int inLeft, int inRight){
if(preLeft > preRight || inLeft > inRight) {
return null;
}
int rootVal = preorder[preLeft];
TreeNode root = new TreeNode(rootVal);
int pIndex = inMap.get(rootVal);
root.left = buildTree(preorder, preLeft + 1, preLeft + pIndex - inLeft, inMap, inLeft, pIndex - 1);
root.right = buildTree(preorder, preLeft + pIndex - inLeft + 1, preRight, inMap, pIndex + 1, inRight);
return root;
}
}