简单的递归题目,给出中序遍历和前序遍历,重建该树
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
static HashMap<Integer, Integer> mp;
public TreeNode buildTree(int[] preorder, int[] inorder){
mp = new HashMap<>();
for(int i = 0; i < inorder.length; ++i){
mp.put(inorder[i], i);
}
return buildTree(inorder, 0, inorder.length , preorder, 0, preorder.length );
}
public TreeNode buildTree(int[] inOrder, int inStart, int inEnd,
int[] preOrder, int preStart, int preEnd){
TreeNode node = null;
if(inStart < inEnd){
node = new TreeNode(preOrder[preStart]);
int site = mp.get(preOrder[preStart]);
node.left = buildTree(inOrder, inStart, site, preOrder, preStart + 1, preStart + site - inStart);
node.right = buildTree(inOrder, site + 1, inEnd, preOrder, preStart + site - inStart + 1, preEnd);
}
return node;
}
}