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);
    }
}
相关推荐
soft_hub125 分钟前
海外会议怎么用录音APP翻译会议内容
面试·职场和发展
文丑颜不良啊41 分钟前
LeetCode1261~1280题目解析
java·leetcode
not coder1 小时前
一文讲通--从树到红黑树
数据结构·算法
octopus_c1 小时前
C++ 入门
开发语言·c++·算法
ZhengEnCi1 小时前
2026年10月30日AI早报:Gemini 4 Carbon登顶、DeepSeek融资1055亿、智元机器人上岗实测
人工智能·算法
强哥聊算力1 小时前
《算力江湖·Intel帝国往事》第三集:安迪·格鲁夫的铁血时代:Intel为什么能把对手逼到墙角?
运维·人工智能·科技·算法·ai·gpu算力
Shaoshing2 小时前
LeetCode100 11. 盛最多水的容器
算法·leetcode
CoderYanger2 小时前
Java EE 进阶:5. Spring IoC&DI(第二弹):Spring IoC
java·开发语言·spring boot·spring·面试·职场和发展·java-ee
骑着蜗牛撵大象3272 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
Eyfcom2 小时前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统