java数据结构与算法刷题-----LeetCode108:将有序数组转换为二叉搜索树

【经典算法】LeetCode 108. 将有序数组转换为二叉搜索树(Java/C/Python3/Go实现含注释说明,Easy) 方式优点缺点时间复杂度空间复杂度其他递归中值法1. 代码简洁,逻辑清晰。1. 在最坏情况下,递归调用栈可能会占用额外的 O(n) 空间。O(n)平均 O(log n),最坏 O(n)1. 易于理解和实现。迭代栈方法1. 避免了递归调用栈可能导致的空间问题。1. 相比递归方法,代码可能略显复杂。O(n)平均 O(log n),最坏 O(n)1. 更节省空间,适合处理大数据集。说明递归中值法:该方法直接通过递归找到数组的中值作为根节点,然后递归地构建左子树和右子树。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析:时间复杂度O(n)

中序遍历,二分查找,具体看代码注释,有例子

  1. 代码
    在这里插入图片描述
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    /**O(n)
     * 二分左右遍历,中序遍历
     * [-10,-3,0,5,9]
     * 先找中间的,0作为根,左边就是[-10,-3],右边就是[5,9]
     * 找左边中间的为左子树,-10。右边中间右子树根结点,5
     *
     * 然后,-10为根结点,左边是[]直接搞成null,右边是[-3]。右子树就是-3
     * 依次类推
     */
    public TreeNode sortedArrayToBST(int[] nums) {
        if(nums.length == 0) return null;//是[]直接返回,[]也是平衡二叉树
        return sortedArrayToBST(nums,0,nums.length-1);//二分构建
    }
    public TreeNode sortedArrayToBST(int[] nums,int left,int right) {
        if(left>right) return null;//二分退出条件
        int mid = left + (right-left)/2;//中间下标
        //递归,每次都找中间值,自己,左子树,右子树,都是中间值
        return new TreeNode(nums[mid],sortedArrayToBST(nums,left,mid-1),
                sortedArrayToBST(nums,mid+1,right));
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  4. 差分数组:对差分数组求前缀和即可得到原数组
  1. 用差值,作为下标,节省空间找东西。比如1900年到2000年,就可以定义100大小的数组,每个数组元素下标的查找为1900。
  2. 前缀和数组,对于数组 [1,2,2,4],其差分数组为 [1,1,0,2],差分数组的第 ii个数即为原数组的第 i-1 个元素和第 i个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组
  1. 前缀和:假设有一个数组arr[1,2,3,4]。然后创建一个前缀和数组sum,记录从开头到每个元素区间的和。第一个元素是0。第二个元素,保存第一个和sum[1] = sum[0]+arr[0],第二个元素,保存第二个和sum[2] = sum[1]+arr[1]
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
【简单】力扣算法题解析LeetCode108:将有序数组转换为二叉搜索树 题目要求将升序数组转换为平衡二叉搜索树。核心思路是利用二分法递归构建:每次选择中间元素作为根节点,左子树由左侧子数组构建,右子树由右侧子数组构建,确保左右子树高度差≤1。Java实现通过递归函数处理子数组范围,时间复杂度O(n),空间复杂度O(log n)。示例验证了算法的正确性,如输入[-10,-3,0,5,9]可输出[0,-3,9,-10,null,5]。代码简洁高效,符合平衡二叉搜索树的性质要求。 阅读详情

相关推荐

PV-RCNN实战:如何在KITTI数据集上实现3D目标检测(附完整代码解析)

本文提供了在KITTI数据集上实战PV-RCNN 3D目标检测的完整指南,涵盖环境配置、数据预处理、模型训练与评估全流程。通过详细的代码解析和调参技巧,帮助读者掌握这一融合点与体素优势的经典3D目标检测模型,并实现从理论到实践的跨越。

weixin_29098391的博客 404

leetcode练习(前缀树数组实现)(java)

单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。 现在,给定一个由许多词根组成的词典和一个句子。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。 你需要输出替...

AXKDD6555的博客 513

手把手教你用FPGA实现SerDes高速接口设计(附避坑指南)

本文是一份详尽的FPGA SerDes高速接口设计实战指南。文章深入剖析了SerDes硬核(如GTX/GTH)的时钟管理、发送端均衡、接收端CDR与均衡等核心模块,并提供了Verilog代码示例。重点分享了信号完整性分析、眼图调试与误码率测试等实战经验,附有自定义高速视频流接口的完整实现案例与避坑指南,帮助工程师从“会用”到“懂”且能独立驾驭高速接口设计。

ik678901234的博客 1149

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3313

百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析)

本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。

loss4bartender的博客 683

【LeetCode刷题日记】108.将有序数组转换为二叉搜索树

题目:给定升序数组,转换为高度平衡的二叉搜索树(BST)。 核心思想:BST的中序遍历即为升序序列。为保持平衡,每次取数组中间元素作为根节点,使左右子树节点数差≤1,再递归构建左右子树。 递归三步: 终止条件:left > right 返回 null 找中点:mid = left + (right - left)/2,创建根节点 递归构建:root.left 处理左区间,root.right 处理右区间 示例:[-10,-3,0,5,9] 以 0 为根,左子树 [-10,-3] 以 -10 为根

任岁月风干理想再也找不回真的我 1355

【CUT&TAG分析-加了spike in的样品】

使用 Bowtie2 或 Subread (subjunc) 来构建大肠杆菌的索引。bowtie2比对时设置参数–local, 局部比对。

weixin_57975238的博客 1400

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

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

南 墙 1万+

AI辅助专利撰写实战:用Codex 30分钟生成发明专利初稿

这次我们来看一个用 Codex 从零开始撰写发明专利的实战项目。对于技术研发人员、产品经理或初创团队来说,专利申请是保护创新成果、构建技术壁垒的关键一步。然而,撰写一份高质量的专利申请书,尤其是权利要求书和说明书,往往需要专业的法律和技术语言,耗时耗力。这个项目演示了如何利用 AI 工具 Codex,在短时间内生成一份结构完整、逻辑清晰、具备授权潜力的专利申请文件初稿。 整个过程的核心不是让 AI 完全替代专利代理人,而是将其作为强大的“技术翻译”和“内容生成”助手。它能将你的技术构思、流程图、核心算法或产

weixin_32181267的博客 417

基于Simulink的电力电子负载特性模拟仿真实例

电阻性负载是最简单的负载形式,其阻抗为纯电阻,电流和电压之间的关系符合欧姆定律。电阻性负载的特点是消耗能量,不会存储能量。本示例将以一个典型的直流电源供电系统为例,展示如何利用Simulink进行不同负载特性的仿真模拟。直流电源:提供固定电压输入。逆变器(可选):根据需要产生PWM调制信号,驱动负载。负载模块:模拟不同类型的负载特性,如电阻性负载、电感性负载和容性负载。测量模块:用于观察负载上的电压和电流波形。系统架构视图plaintext深色版本v| || |

xiaoheshang_123的博客 430

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

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

weixin_45994787的博客 1145

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1993

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

训练营第26天:669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

jiabao0520的博客 1241

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode100之将有序数组转化为二叉搜索树(108)--Java

这道题,只要明白二叉搜索树的概念,基本就没什么问题了。

2301_79318558的博客 1570

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

执行结果: 通过 显示详情 执行用时 :2 ms, 在所有 Java 提交中击败了78.64% 的用户 内存消耗 :38.3 MB, 在所有 Java 提交中击败了47.48%的用户 题目: 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 给定有序数组: [-10,...

逆水行舟,不进则退 1099

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

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

代码随想录算法训练营第二十三天| LeetCode 669.修剪二叉搜索树 、LeetCode108.将有序数组转换为二叉搜索树、LeetCode538. 把二叉搜索树转换为累加树

说明当前节点需要删除,但是由于其孩子可能符合条件,因此应该继续向右遍历,用right接收返回值。说明当前节点需要删除,但是由于其孩子可能符合条件,因此应该继续向左遍历,用left接收返回值。调用递归函数,用root接收返回值,传入数组,0,数组的长度-1三个值,返回递归函数返回的值。递归调用递归函数,传入数组,左区间边界下标,和中间位置下标-1,用当前节点的左孩子接收。递归调用递归函数,传入数组,中间位置下标+1,右区间边界下标,用当前节点的右孩子接收。向右递归遍历,传入当前节点的右孩子。

m0_64514622的博客 1243

Java版LeetCode热题100之将有序数组转换为二叉搜索树:从平衡构建到工程实践的全面解析

二叉搜索树(BST):左子树所有节点 💡核心挑战如何选择根节点才能保证高度平衡?答案:总是选择中间位置的元素!严格平衡:左右子树高度差 ≤ 1(本题要求)近似平衡:如红黑树的黑色高度平衡完全平衡:所有叶子在同一层(完美二叉树)分治思想的完美体现问题分解 → 子问题求解 → 结果合并递归天然匹配树形结构平衡性的数学保证中间选择 → 长度均衡 → 高度平衡归纳法证明正确性多解性与灵活性三种根选择策略都正确体现了算法设计的多样性工程实践考量防止整数溢出空间复杂度分析实际应用场景。

吾为热爱计科,致力于知识分享的践行者,此博客是我在这条道路上留下的足迹。 940

刷题计划 day21 二叉树(十)【删除二叉搜索树中的节点】【修剪二叉搜索树】【将有序数组转换为二叉搜索树】【把二叉搜索树转换为累加树】

刷题计划day21二叉树(十)继续,二叉树专题终于结束了哈哈,下一期是回溯专题,敬请期待关注【删除二叉搜索树中的节点】【修剪二叉搜索树】【将有序数组转换为二叉搜索树】【把二叉搜索树转换为累加树】

weixin_72499901的博客 1002

java数据结构与算法刷题-----LeetCode109. 有序链表转换二叉搜索树

【代码】java数据结构与算法刷题-----LeetCode109. 有序链表转换二叉搜索树。

殷志鹏的博客 1123

算法训练(leetcode)二刷第十八天 | 669. 修剪二叉搜索树、108. 将有序数组转换为二叉搜索树、538. 把二叉搜索树转换为累加树

LeetCode二刷

weixin_43872997的博客 751

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

本文介绍了将有序数组转换为平衡二叉搜索树的算法。该算法采用递归分治思想,通过选择数组中间元素作为根节点,递归构建左右子树,形成高度平衡的二叉搜索树。算法时间复杂度为O(n),空间复杂度为O(n),能保证构建的BST既平衡又满足搜索树特性。文章详细解析了代码实现、执行流程和设计思想,并讨论了应用场景和边界情况处理,是一道经典的分治算法案例。

mrjieke6的博客 602

leetcode刷题记录

刷题过程记录

洪肥肥的博客 2063

Leetcode 刷题 108

Leetcode 刷题记录 Leetcode 108 有序数组转化为二叉树 将有序数组转化为二叉树,可以理解为中序遍历的逆运算。 这里采用递归的方式完成该题。 ```java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; }

finnzhang1998的博客 198

对称二叉树、二叉树的最大深度、将有序数组转换为二叉搜索树

1、LeetCode 101.对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的。 小编菜解 class Solution { public boolean isSymmetric(TreeNode root) { return check(root,root); } private boolean check(TreeNode p, TreeNode q){ if(p == null && q == null){

学Java,找哪吒 2436
上一篇: java数据结构与算法刷题-----LeetCode58:最后一个单词的长度
下一篇: java数据结构与算法刷题-----LeetCode110:平衡二叉树
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值