LeetCode--108.将有序数组转换为二叉搜索树(二叉树)

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

题目描述

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

示例 1:

复制代码
输入:nums = [-10,-3,0,5,9]
输出:[0,-3,9,-10,null,5]
解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:

示例 2:

复制代码
输入:nums = [1,3]
输出:[3,1]
解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示:

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums严格递增 顺序排列

图解思路

代码

java 复制代码
/**
 * 将有序数组转换为高度平衡二叉搜索树
 */
class Solution {

    /**
     * 在 nums[left, right] 区间内构造平衡 BST
     *
     * 使用左闭右闭区间:
     * [left, right]
     */
    public TreeNode buildBBST(int[] nums, int left, int right) {

        // 区间为空,无法构造节点
        if (left > right) return null;

        // 取区间中点作为根节点
        //
        // 因为数组本身有序:
        // 中点左边都比它小
        // 中点右边都比它大
        //
        // 因此天然满足 BST 性质
        //
        // 同时中点划分能保证左右子树节点数量尽量接近,
        // 从而保证树高度平衡
        int mid = left + (right - left) / 2;

        TreeNode root = new TreeNode(nums[mid]);

        // 构建左子树
        //
        // 左区间所有元素 < nums[mid]
        root.left = buildBBST(nums, left, mid - 1);

        // 构建右子树
        //
        // 右区间所有元素 > nums[mid]
        root.right = buildBBST(nums, mid + 1, right);

        return root;
    }

    public TreeNode sortedArrayToBST(int[] nums) {

        // 从整个数组开始构建 BST
        return buildBBST(nums, 0, nums.length - 1);
    }
}
相关推荐
徐小夕10 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发11 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子12 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
中微极客13 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek14 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H14 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H14 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H14 小时前
数据结构与算法的通俗指南
数据结构·算法
2301_7644413314 小时前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模