LeetCode 47 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) {
        //check para
        if(preorder == null || inorder == null || preorder.length == 0 || inorder.length == 0 
            || preorder.length != inorder.length)
            return null;
        
        return buildTree(preorder, 0, preorder.length-1, inorder, 0, inorder.length-1);
        
    }
    public TreeNode buildTree(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart, int inEnd){
        if(preStart > preEnd || inStart>inEnd)
            return null;
        TreeNode root = new TreeNode(preorder[preStart]);
        int i;
        for(i=0; i<=inEnd-inStart; i++){
            if(inorder[inStart+i] == preorder[preStart])
                break;
        }
        root.left = buildTree(preorder, preStart+1, preStart+i, inorder, inStart, inStart+i-1);
        root.right = buildTree(preorder, preStart+i+1, preEnd, inorder, inStart+i+1, inEnd);
        return root;
    }
}


你可能感兴趣的:(LeetCode,递归,二叉树,中序先序)