题解 | #大数乘法#

将升序数组转化为平衡二叉搜索树

http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d

c语言

    /**
     * 
     * @param num int整型一维数组 
     * @return TreeNode类
     */
    public TreeNode sortedArrayToBST (int[] nums) {
        // 判断特殊情况, 数组为空,或数组上没有元素,直接返回 null
        if (nums == null || nums.length == 0) {
            return null;
        }

        return process(nums, 0, nums.length - 1);
    }


    /**
     *
     * @param nums  整个的有序数组
     * @param left  数组的左边界, 闭区间
     * @param right 数组的右边界, 闭区间
     * @return nums[left ... right] 这个范围的数组,转成 BST 后的根节点
     */
    public TreeNode process(int[] nums, int left, int right) {
        // 左边界 比 右边界 大, 说明数组上没有元素,直接返回 null
        if (left > right) {
            return null;
        }
        // 如果只有一个元素,就把它当成根节点直接返回
        if (left == right) {
            TreeNode root = new TreeNode(nums[left]);
            return root;
        }

        // nums[left ... right] 这个数组的长度
        int len = right - left + 1;
        // nums[left ... right] 这个数组的中点下标,这个下标里的元素值就是 BST 的根节点的值
        int mid = left + len / 2;
        TreeNode root = new TreeNode(nums[mid]);
        // 找出根节点的左子树: 继续递归用这个方法,找出左子树上这个局部范围的BST的根节点
        root.left = process(nums, left, mid - 1);
        // 找出根节点的右子树: 继续递归用这个方法,找出右子树上这个局部范围的BST的根节点
        root.right = process(nums, mid + 1, right);
        return root;
    }
}
全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
12-18 19:36
已编辑
门头沟学院 Java
程序员牛肉:可以的,简历没毛病了。 虽然还是偏向同质化,不过学历不错。后续我觉得重心放到刷实习+摆脱同质化问题上
实习简历求拷打
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务