一起学习LeetCode热题100道(42/100)

42.将有序数组转换为二叉搜索树(学习)

给你一个整数数组 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,33,1 都是高度平衡二叉搜索树。

提示:

1 <= nums.length <= 104

-104 <= numsi <= 104

nums 按 严格递增 顺序排列

解析:
一、基本情况处理:

1.如果输入的数组nums为空(即长度为0),则没有元素可以构成树,因此返回null。

二、找到中间元素:

1.使用Math.floor(nums.length / 2)计算数组的中间索引。由于数组索引是从0开始的,这个操作确保了我们总能找到中间位置的元素(如果数组长度是奇数)或两个中间位置元素中的一个(如果数组长度是偶数,这里我们选择靠左的那个)。

2.将中间索引对应的元素值赋给根节点root。

三、递归构建子树:

1.使用slice方法将数组分为两部分:左半部分(nums.slice(0, mid))和右半部分(nums.slice(mid + 1))。注意,这里mid + 1是因为slice的结束索引是不包含的,我们需要从中间元素的下一个位置开始截取右半部分。

2.对左半部分数组递归调用sortedArrayToBST函数,将返回的结果作为根节点的左子树。

3.对右半部分数组递归调用sortedArrayToBST函数,将返回的结果作为根节点的右子树。

四、返回根节点:

1.完成上述步骤后,我们得到了一个以numsmid为根节点,左子树由左半部分数组构建,右子树由右半部分数组构建的平衡二叉搜索树。返回这个根节点。

javascript 复制代码
var sortedArrayToBST = function (nums) {
    if (nums.length === 0) {
        return null;
    }

    // 找到数组的中间元素  
    const mid = Math.floor(nums.length / 2);
    const rootVal = nums[mid];
    const root = new TreeNode(rootVal);

    // 递归构建左子树和右子树  
    root.left = sortedArrayToBST(nums.slice(0, mid));
    root.right = sortedArrayToBST(nums.slice(mid + 1));

    return root;
};
相关推荐
mldong1 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾12 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
问天_观心2 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
zhanghe6873 小时前
es的密码带有特殊字符,导出
java
指掀涛澜天下惊3 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
pnoker3 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
my_realmy3 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
star learning white3 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程3 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
天远数科3 小时前
风险治理实战:基于天远车信盟出险构建自动化理赔核保流水线
java·网络·人工智能·自动化