根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
解题思路:采用递归
根据:1.preorder 数组的开始节点为根节点
2。根据该根节点可以找到左子树和右子树。
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
}
private TreeNode build(int[] preorder, int pre_start, int pre_end, int[] inorder, int in_start, int in_end) {
if(pre_start > pre_end || in_start > in_end )
return null ;
TreeNode root = new TreeNode(preorder[pre_start]);
int index = 0;
for(int i = in_start ;i<=in_end;i++){
if(inorder[i] == preorder[pre_start]){
index = i ;
break;
}
}
root.left = build (preorder,pre_start + 1,pre_start + (index - in_start),inorder,in_start,index-1);
root.right = build (preorder,pre_start + (index - in_start) + 1,pre_end,inorder,index+1,in_end);
return root;
}