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);
    }
}
相关推荐
血小板要健康8 分钟前
二叉树 dfs 题型总结
算法·深度优先
我变成萤火虫5 小时前
河南萌新联赛2026第(四)场:南阳理工学院
数据结构·c++·算法·贪心算法·stl·动态规划
To_OC8 小时前
LC 239 滑动窗口最大值:从暴力超时到单调队列一遍过
javascript·算法·leetcode
.道阻且长.9 小时前
9.LeetCode算法习题讲解--滑动窗口--无重复字符的最长字串
算法·leetcode·职场和发展·哈希算法
ltl10 小时前
HNSW:图索引如何击败树索引
算法
嗯哼python10 小时前
从 0 到 1 构建 AI 模拟面试系统:RAG + LangGraph 的工程实践
人工智能·面试·职场和发展
曹牧11 小时前
C#:数字的定义和表示方式
算法·c#
Nil20812 小时前
leetcode 138随机链表的复制
算法·leetcode·链表
疯狂打码的少年13 小时前
【数据结构】图的遍历:深度优先搜索(DFS)
数据结构·笔记·算法·深度优先