108. 将有序数组转换为二叉搜索树

 

 

 

 

 

二叉树的建立方式是不唯一的,因此这里我们不同的方法建立的二叉树也是不一致的

这里我用的方法是二分法取中间元素建立当前叶子节点

时间O(n)(每个元素都需要遍历一遍),空间O(logn)(本次建立的二叉树要保持平衡,所以树的高度固定为logn)

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

    public TreeNode def(int left,int right,int[] nums){
        // 递归结束条件
        if (left>right) return null;
        int mid = (left+right)/2;
        TreeNode temp = new TreeNode(nums[mid]);
        temp.left=def(left,mid-1,nums);
        temp.right=def(mid+1,right,nums);
        return temp;
    }
}

 

posted @ 2021-04-10 14:48  jchen104  阅读(47)  评论(0编辑  收藏  举报