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

力扣(LeetCode) 108: 将有序数组转换为二叉搜索树 - 解法思路 给定一个整数数组nums,其中元素按升序排序,将其转换为高度平衡的二叉搜索树。高度平衡二叉树是指每个节点的两个子树的深度差不超过 1 的二叉树。关键洞察是在每一步使用中间元素作为根节点。BST 属性:左 < 根 < 右(因为数组已排序)高度平衡:左右子树大小相似最优结构:给定节点数的最小高度为了获得最佳性能,使用带索引的辅助函数方法而不是数组切片。 阅读详情

1、题目

在这里插入图片描述

2、解法

class Solution {
    // 如果是奇数,选择最中间的值,如果是偶数,选择中间左边或者右边都是可以的
    private int[] nums;
    public TreeNode build(int left, int right) {
        if (left > right ) return null;
        // 用这个不好判断是偶数是奇数
        int mid = (left + right) / 2;
        // 所以用这个来判断, 如果使用左边的点,就去掉这一行
        if ((left + right) % 2 == 1)  ++mid;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = build(left, mid-1);
        root.right = build(mid+1, right);
        return root;
    }
    public TreeNode sortedArrayToBST(int[] nums) {
        this.nums = nums;
        return build(0, nums.length -1 );
    }
}

时间复杂度为O(n),每个结点只访问一次,空间复杂度为O(n),递归栈为O(logn)

或者任意选择一个位置就可:

if ((left + right) % 2 == 1) p += rand.nextInt(2);

3、知识点

高度平衡意味着每次必须选择中间数字作为根节点。这对于奇数个数的数组是有用的,但对偶数个数的数组没有预定义的选择方案。

【简单】力扣算法题解析LeetCode108:将有序数组转换为二叉搜索树 题目要求将升序数组转换为平衡二叉搜索树。核心思路是利用二分法递归构建:每次选择中间元素作为根节点,左子树由左侧子数组构建,右子树由右侧子数组构建,确保左右子树高度差≤1。Java实现通过递归函数处理子数组范围,时间复杂度O(n),空间复杂度O(log n)。示例验证了算法的正确性,如输入[-10,-3,0,5,9]可输出[0,-3,9,-10,null,5]。代码简洁高效,符合平衡二叉搜索树的性质要求。 阅读详情

相关推荐

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.csdn.net/weixin_38218267/article/details/1

aizaiyueye的专栏 3449

【每日力扣Leetcode】108-将有序数组转换为二叉搜索树

力扣题库108,将有序数组转换为二叉搜索树。 题目链接点这里。 文章目录题目描述解题思路初始答案改进答案注意事项 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -1

T型人小付的博客 332

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.csdn.net/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.csdn.net/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

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

题目描述(简单难度) 给一个升序数组,生成一个平衡二叉搜索树。平衡二叉树定义如下: 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 二叉搜索树定义如下: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值...

wind_liang的博客 1389

SAP PCE私有云MM02修改物料主数据基本单位报错

当前发现只有改为AAAADL(无量纲)单位时会报错,其他的正常。一开始以为配置的ISO码换算有问题,对配置排查后,排除配置问题。最后发现是PCE当前版本的原因,需要打上NOTE。SAP PCE私有云在没有库存和业务单据的情况下,MM02修改物料主数据基本单位报错“EA CPZP MK000000000000:PCS 不可转换为”,详见截图。点击【显示错误】,提示EA CPZP MK000000000000:PCS 不可转换为。从SAP FOR ME下载NOTE 3531359,链接。

dingqing86的专栏 522

ubuntu安装hodoop详细步骤

进入到Ubuntu系统中打开桌面,点击鼠标右键打开终端,在终端中输入如下命令这样就可以创建一名为hadoop的新用户。给用户输设置密码输入,输入如下命令,设置密码,按提示输入两次然后为hadoop用户增加管理员全新,这样就可以方便部署完成之后输入重启命令,重启一下Ubuntu系统,然后登录到我们创建的hadoop用户上面reboot。

2301_77603488的博客 9199

LeetCode第108题_将有序数组转换为二叉搜索树

给你一个整数数组nums,其中元素已经按排列,请你将其转换为一棵二叉搜索树。二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

qq_40263592的博客 1540

两层板如何做阻抗控制呢

两层板如何做阻抗控制呢? 这个问题可能很多人都会碰到,有的人在此等需要做阻抗控制的情况都选择做多层板。诚然,多层板在阻抗控制,EMC等等方面都有着天然的优势。然而,在价格上和周期上,两层板就有着绝对优势了。 对于成本非常敏感而又不是太复杂的产品,尽管对于我们硬件工程师而言,有一堆的理由要求使用多层板。然而在面对毛都不懂的老板“别人能做,你为什么不能做?”这个问题时只得低下我们高傲的头颅。 好...

weixin_42005993的博客 2万+

108. 将有序数组转换为二叉搜索树【 力扣(LeetCode) 】

摘要: 题目要求将升序排列的整数数组转换为平衡二叉搜索树(BST)。平衡BST的左右子树高度差不超过1,且中序遍历结果为有序序列。解题思路是采用二分法,每次选取数组中间元素作为根节点,递归构建左右子树。具体实现通过辅助函数BuildNode确定子数组中心位置,创建节点并递归处理左右子数组。时间复杂度为O(n),空间复杂度为O(log n)。示例代码展示了如何通过递归分治实现这一过程。 (字数:150)

yyh520025的博客 909

STM32F103C8T6蓝莓派用HAL库GPIO模拟SPI驱动MAX31865读取PT100温度(附完整代码)

本文详细介绍了如何在STM32F103C8T6蓝莓派开发板上使用HAL库通过GPIO模拟SPI驱动MAX31865读取PT100温度传感器的完整方案。内容包括硬件连接、CubeMX配置、GPIO模拟SPI实现、温度计算算法及常见问题排查,并附有完整代码示例,帮助开发者快速实现高精度温度测量。

weixin_30684743的博客 938

基于HetConv与Dual策略的YOLOv8轻量化设计-CSPHet结构的优化与实现

在计算机视觉中,YOLOv8作为目标检测领域的最新版本,通过引入多种改进来提升检测精度和速度。然而,提升精度和保持实时性能往往需要更多参数与计算量。本文提出一种结合Dual思想与HetConv的新型轻量化结构,称为CSPHet。CSPHet能够在保持YOLOv8检测精度的基础上有效减少约70万参数量,实现模型的轻量化和速度的提升。HetConv(Heterogeneous Convolution)是一种混合卷积技术,通过同时使用1x1、3x3等不同大小的卷积核,来捕捉不同尺度的特征。

博客 1327

力扣108. 将有序数组转换为二叉搜索树(中序遍历,递归)

力扣108. 将有序数组转换为二叉搜索树(中序遍历,递归) https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/ 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组...

小麦China的博客 583

starrc: LEF DEF FLOW与full chip flat netlist

SIKP_CELLS默认为"SKIP_CELLS: *"意思是跳过所有ref cell内部的rc提取,仅提取cell之间的互联线的rc,"SKIP_CELLS: *!与MACRO_DEF_FILE搭配使用的还有SKIP_CELLS命令,如果想提取block的寄生参数生成full chip的flat netlist,或者跳过block取执行hier的寄生参数提取都需要用到SKIP_CELLS。此时,macroA和macroB没有被跳过,所以提取其内部的rc,spef中存在两个A和两个B。

m0_61544122的博客 554

力扣leetcode 108. 将有序数组转换为二叉搜索树 java

/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { publ...

izhxxx的博客 357

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

leetcode刷题记录(七十四)——108. 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)108. 将有序数组转换为二叉搜索树 - 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

weixin_45994787的博客 1145

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

这段代码实现了一个将有序数组转换为平衡二叉搜索树的算法。通过递归方法,每次选取数组中间元素作为当前子树的根节点,左半部分构建左子树,右半部分构建右子树。这样保证了生成的二叉搜索树既是平衡的(左右子树高度差不超过1),又满足二叉搜索树的性质(左子树所有值小于根节点,右子树所有值大于根节点)。

2401_82472941的博客 128

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

LeetCode.108 将有序数组转换为二叉搜索树,递归解法

weixin_43599456的博客 347

算法学习——LeetCode力扣二叉树篇8(669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树 )

算法学习——LeetCode力扣二叉树篇8(669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树 )

拉依达不拉跨的博客 1221

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

小结:不简单的简单题,要想到以数组首尾位置作为参数,递归进行建树。

weixin_46878941的博客 282

leetcode 108 递归-二分 有序数组转换为二叉搜索树

leetcode 108 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} ...

qq_35299223的博客 195

【LeetCode108.将有序数组转换为二叉搜索树】vs. 【将二叉搜索树转换为有序数组】

由于二叉搜索树对于任意一个节点来说,左孩子小于父亲节点,右孩子大于父亲节点,因此可以直接通过中序遍历,得到升序数组。

qq_52114254的博客 369

LeetCode108-将有序数组转换为二叉搜索树

总是有朋友跟我说:我总是拿美女图片做封面 怀疑我有些流氓 我郑重声明:我就是想吸引流量而已 写篇文章不容易啊哈哈哈哈哈哈哈 瞧,我现在不就换了一张图片了吗? 108-将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-1...

飞奔的菜猪的博客 276

代码随想录算法训练营Day18 | Leetcode 669修剪二叉搜索树、108将有序数组转换为二叉搜索树、538把二叉搜索树转换为累加树

给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中。改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。node.val 的值之和。

叽里呱啦大王的博客 1003

Java实现 LeetCode 108 将有序数组转换为二叉搜索树

108. 将有序数组转换为二叉搜索树 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,-3,0,5,9], 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9...

南 墙 1万+

力扣LeetCode #108 将有序数组转换为二叉搜索树(SortedArrayToBST)

- 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 来源:LeetCode - 示例 给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:       0     /   \   -3   9   /

weixin_49155948的博客 211

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

通过分治法,我们可以高效地将一个升序数组转换为平衡的二叉搜索树。这种方法的时间复杂度和空间复杂度都非常优秀,适合处理大规模数据。非递归方法通过栈模拟递归过程,避免了递归调用栈的开销,适合处理大规模数据或深度较大的树。虽然代码稍复杂,但性能更优。

qq_40017444的博客 1047
上一篇: Leetcode 230.二叉搜索树中第k小的元素
下一篇: 数值的整数次方
念殊15
博客等级 码龄8年 17粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值