题目:Construct Binary Tree from Preorder and Inorder Traversal
难度:medium
问题描述:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
解题思路:
我们有两个数组分别为前序遍历和中序遍历返回值pre,in。
前序遍历表示pre[0]为root节点。我们在in中可以找到pre[0]的值,不妨设为in[5]=pre[0],那么我们可以知道,in[0]-in[4]为root的左子树,in[6]-end为右子树。
通过递归可以求解。代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(0,0,inorder.length-1,preorder,inorder);
}
private TreeNode build(int prestart,int instart,int inend,int[]preorder,int[]inorder){
if(prestart>preorder.length-1||instart>inend){
return null;
}
TreeNode root=new TreeNode(preorder[prestart]);
int inindex=0;
for(int i=instart;i<=inend;i++){
if(inorder[i]==root.val){
inindex=i;
break;
}
}
root.left=build(prestart+1,instart,inindex-1,preorder,inorder);
root.right=build(prestart+inindex-instart+1,inindex+1,inend,preorder,inorder);
return root;
}
}