输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
限制:
0 <= 节点个数 <= 5000
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,inorder,0,0,inorder.length-1);
}
public TreeNode build(int[] preorder, int[] inorder,int root,int start,int end) {
if(start > end)return null;
TreeNode treeNode = new TreeNode(preorder[root]);
int i = start;
while (i<end && preorder[root] != inorder[i])i++;
treeNode.left = build(preorder,inorder,root+1,start,i-1);
treeNode.right = build(preorder,inorder,root+1+i-start,i+1,end);
return treeNode;
}