105. Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree.

Note:
You may assume that duplicates do not exist in the tree.

---

 

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode buildTree(int[] preorder, int[] inorder) {
    
        if(preorder.length == 0 || preorder.length != inorder.length) return null;
        return helper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
    
    }
    
    
    public TreeNode helper(int[] pre, int start1, int end1, int[] in, int start2, int end2){
        
        if(start1 > end1 || start2 > end2) return null;
        
        int val = pre[start1];
        TreeNode cur = new TreeNode(val);
        
        int k = start2;
        while(k <= end2){
            if(in[k] == val) break;
            k++;
        }
               
        cur.left = helper(pre, start1 + 1, start1 + k - start2, in, start2, k - 1);
        cur.right = helper(pre, start1 + k - start2 + 1, end1, in, k + 1, end2);
        
        return cur;
    }
}

 

posted @ 2013-09-22 02:05  LEDYC  阅读(189)  评论(0)    收藏  举报