108. Convert Sorted Array to Binary Search Tree

问题描述:将一个已排好序的数组构建成BST树。
思路:一个BST树从上向下看就是一个排好序的数组。所以取中间数字为根节点,然后递归构建左右子树。
原答案:

    public TreeNode sortedArrayToBST(int[] nums) {
        int length=nums.length;
        if(length==0)
            return null;
        if(length==1)
            return new TreeNode(nums[0]);
        int pos=length/2;
        TreeNode root=new TreeNode(nums[pos]);
        root.left=sortedArrayToBST(nums,0,pos-1);
        if(length>2)
            root.right=sortedArrayToBST(nums,pos+1,length-1);
        return root;
    }

    private TreeNode sortedArrayToBST(int[] nums,int begin,int end) {
        int length=end-begin+1;
        int pos=length/2+begin;
        TreeNode root=new TreeNode(nums[pos]);
        if(pos-begin==1)
            root.left=new TreeNode(nums[begin]);
        else if(pos-begin>1)
            root.left=sortedArrayToBST(nums,begin,pos-1);
        if(end-pos==1)
            root.right=new TreeNode(nums[end]);
        else if(end-pos>1)
            root.right=sortedArrayToBST(nums,pos+1,end);
        return root;
    }

最佳答案:

 public TreeNode sortedArrayToBST(int[] nums) {
        return buildTree(nums, 0, nums.length - 1);
    }

    private TreeNode helper(int[] nums, int start, int end) {
        if (start > end) {
            System.out.println(start + ", " + end);
            return null;
        }

        int mid = (end + start) / 2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = helper(nums, start, mid - 1);
        root.right = helper(nums, mid + 1, end);

        return root;
    }

    private TreeNode buildTree(int[] num, int start, int end) {
        if (start > end) {
            return null;
        }

        TreeNode node = new TreeNode(num[(start + end) / 2]);
        node.left = buildTree(num, start, (start + end) / 2 - 1);
        node.right = buildTree(num, (start + end) / 2 + 1, end);
        return node;
    }

思路是一致的。但是边界条件判断的太复杂了。不够精简

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011775905/article/details/79966627
个人分类: leetCode
上一篇551. Student Attendance Record I
下一篇350. Intersection of Two Arrays II
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭