【二叉树】由前序遍历和中序遍历构造二叉树
递归
if(preorder.length != inorder.length)
return null;
if(preorder.length == 0)
return null;
if(preorder.length == 1)
return new TreeNode(preorder[0]);
return buildTree(preorder, inorder, 0, preorder.length - 1, 0, inorder.length -1);
}
private TreeNode buildTree(int[] preorder, int[] inorder, int prei, int prej, int ini, int inj){
if(prei > prej || ini > inj || prei < 0 || prej >= preorder.length || ini < 0 || inj >= inorder.length)
return null;
if(prej - prei < 0)
return null;
if(prei == prej)
return new TreeNode(preorder[prei]);
TreeNode root = new TreeNode(preorder[prei]);
int inFlag = 0;
for(int i = ini; i <= inj; i ++){
if(inorder[i] == root.val){
inFlag = i;
break;
}
}
int num_left = inFlag - ini;
int num_right = inj - inFlag;
root.left = buildTree(preorder, inorder, prei + 1, prei + num_left, ini, inFlag - 1);
root.right = buildTree(preorder, inorder, prej - num_right + 1, prej, inFlag + 1, inj);
return root;
}