利用先序和中序遍历结果构造二叉树(默认没有重复元素)
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Test{
int pre_idx=0;
int[] preorder;
int[] inorder;
Map<Integer,Integer> map= new HashMap<Integer,Integer>();
public TreeNode buildTree(int[] preorder, int[] inorder) {
this.inorder=inorder;
this.preorder=preorder;
for(int i=0;i<inorder.length;i++)
{
map.put(inorder[i],i);
}
return helper(0,inorder.length-1);
}
public TreeNode helper(int in_left,int in_right)
{
if(in_left>in_right)
return null;
int root_val = preorder[pre_idx++];
TreeNode root = new TreeNode(root_val);
int index = map.get(root_val);
root.left=helper(in_left,index-1);
root.right=helper(index+1,in_right);
return root;
}