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

news2024/12/25 23:38:10

一、题目

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

二、示例

2.1> 示例 1:

输入】nums = [-10,-3,0,5,9]
输出】[0,-3,9,-10,null,5]
解释】[0,-10,5,null,-3,null,9] 也将被视为正确答案:

2.2> 示例 2:

输入】nums = [1,3]
输出】[3,1]
解释】[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。

提示:

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums 按 严格递增 顺序排列

三、解题思路

根据题目要求,我们要根据题目给出的nums数组,将其转换为一棵 高度平衡 二叉搜索树。那么我们就要保障根节点的左子树节点总数右子树节点总数之差不要超过1。

首先,我们要获得中心节点mid,有如下两种获取方式:

方式1】通过数组长度除以2获得中心点mid—— nums.length / 2
方式2】通过双指针除以2获得中心点mid—— (start + end) / 2;

然后,我们创建min值对应的TreeNode,即:new TreeNode(nums[mid]); 由于我希望减少数组切割的性能消耗,所以采用双指针的方式进行“数组拆分”操作。那么寻找中心点mid也就自然而然的采用“方式2”了。此时,将原有数组拆分为两部分,分别为[start, mid-1][mid+1, end],然后再分别针对这两部分数组再次执行上面操作即可。

通过以上的解题思路,我们在编码时,就可以通过递归调用方式进行解题了。为了便于大家理解,下面我们以输入nums = [-10,-3,0,5,9]为例,看一下具体的解题过程。请见下图所示:

四、代码实现

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return sort(nums, 0, nums.length - 1);
    }
    public TreeNode sort(int[] nums, int start, int end) {
        if (start > end) return null;
        int mid = (start + end) / 2;  // nums数组的寻找中心点
        TreeNode node = new TreeNode(nums[mid]); 
        node.left = sort(nums, start, mid - 1); // 获得node的左节点
        node.right = sort(nums, mid + 1, end); // 获得node的右节点
        return node;
    }
}
/**
 * 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;
 *     }
 * }
 */

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596880.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业邮箱大文件发送指南:推荐一个适用于大文件的邮箱服务

大多数电子邮件服务都不安全并且限制附件文件的大小&#xff0c;但是有一些方法可以安全地发送大文件。如果您曾尝试将多个图像或视频文件附加到电子邮件&#xff0c;您就会知道它并不总是有效。下面为大家介绍一款可以发送大文件的企业邮箱--Zoho Mail。 一、电子邮件发送大文…

【Python】Python系列教程--Python3 环境搭建(二)

文章目录 前言Python3 下载Python 安装Unix & Linux 平台安装 Python3:Window 平台安装 Python:MAC 平台安装 Python: 环境变量配置在 Unix/Linux 设置环境变量在 Windows 设置环境变量在命令提示框中(cmd) : 输入 Python 环境变量运行 Python1、交互式解释器&#xff1a;2…

品牌如何给自己创建一个百度百科词条,在百科上传企业资料方法

对于企业来说&#xff0c;很多人都想给自己企业或者品牌上传正面简介内容到百度百科平台&#xff0c;但创建一个品牌百度百科词条似乎并不是那么简答&#xff0c;很多自己尝试创建品牌百度百科词条的朋友最终都失败了&#xff0c;下面洛希爱做百科网教教大家如何给自己品牌创建…

1.矢量引入

目录 一.什么是矢量 1.1 定义 1.2 公理与体系 1.3 矢量几何化 二.矢量间的相互作用 1.点积 2.点积应用 3.叉积 4. 叉积应用 三.矢量除法 1.单用叉积无法唯一定义矢量除法 2.矢量除法 四.复杂相互作用 1.混合积 2.双叉积 3.Laplace公式 五.泛函的广义矢量理论…

从业十三年SEO大佬干货总结,满满五千字,图文结合,30min带你真正学会SEO

目录 seo优化 介绍seo是什么 网站更新&#xff1a; 网站排名在21世纪的意义: 网站为电商引流 百度算法规则 排名流程 seo策略 规则——“学会在线球里玩” 单页面收录显示 必要条件——链接数量 日志统计——及时优化seo策略 降低识别难度 收录越多排名就越大吗 …

B/S电子病历编辑器源码

电子病历编辑器&#xff0c;简称EMRE&#xff08;EMR Editor&#xff09;&#xff0c;是电子病历系统的核心关键基础技术。 B/S电子病历编辑器源码&#xff0c;带演示&#xff0c;自主研发&#xff0c;官方正版授权 ▶本套电子病历系统主要面向医疗机构医生、护士&#xff0c…

【远程办公】外网远程访问公司内网用友畅捷通T财务软件

文章目录 前言1.本地访问简介2. cpolar内网穿透3. 公网远程访问4. 固定公网地址 转发自cpolar极点云的文章&#xff1a;外网远程访问公司内网用友畅捷通T财务软件 – 远程办公 前言 用友畅捷通T适用于异地多组织、多机构对企业财务汇总的管理需求&#xff1b;全面支持企业对远…

微信小程序构建npm(js和ts)

先吐槽一下&#xff0c;官方文档写的就是一坨粑粑&#xff01;真垃圾 微信小程序构建npm js版本下构建npm1.需要在电脑上按照node&#xff0c;并确保环境变量配置完毕2.新建一个小程序项目&#xff0c;js版本3.从小程序根目录打开cmd命令行4.在命令行中执行npm init -y5.继续执…

Linux UIO驱动

目录 什么是UIO&#xff1f; UIO驱动与普通驱动的区别 How UIO works 重要的结构体 UIO驱动源码 APP实现 测试 UIO驱动的优缺点 UIO在DPDK中的使用 什么是UIO&#xff1f; UIO&#xff08;User-space I/O&#xff09;驱动是一种特殊的Linux内核驱动&#xff0c;允许设…

将 PDF 压缩到 1 MB 或更小的 5 个工具

鉴于工作和生活中PDF文件的频繁传输&#xff0c;压缩文件大小成为PDF文件必不可少的一步&#xff0c;尤其是对于包含大量高清图片的文件。压缩不仅使您的文件兼容发送&#xff0c;还有助于存储优化。这意味着您将获得更多数据空间&#xff0c;适用于本地设备和云端。 想要将 …

把控项目进度,这样做就够了

项目管理的核心在于确保项目成员明确项目目标和自己的职责&#xff0c;以此保证项目成功。类比于十字路口中的指路人&#xff0c;项目经理应该为团队提供清晰的方向&#xff0c;避免走错路。 一、项目进度跟踪 项目进度是制胜的关键&#xff0c;它决定了项目是否能够按时达成…

CDN如何进行内容缓存与内容预热

CDN的启用与管理 1、打开火伞云融合CDN系统控制后台-CDN管理 2、查看加速域名下的全部CDN服务&#xff0c;可以看到有部分厂商暂时处于未启用状态&#xff0c;这是因为这些厂商要求进行域名所有权校验后方可使用&#xff08;如果已经处于已启用状态的厂商则不用额外进行操作&…

Hadoop MapReduce入门实验:WordCount

环境&#xff1a;ubuntu 18.04&#xff0c; Hadoop 3.3.5 参考资料&#xff1a;Hadoop官网&#xff1a;MapReduce Tutorial 前置工作 运行Hadoop。 参考&#xff1a;单节点模式&#xff0c;集群模式 单节点模式&#xff08;for first-time users&#xff09; 在YARN上以pseu…

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务 可以实现基于 redis 的 token 鉴权以及实现 rbac 鉴权。 转载请注明来源&#xff1a;https://janrs.com/vrsr Istio 的外部鉴权本质是基于 Envoy 实现的&#xff0c;直接看 Envoy 的代码&#xff0c;链接地址&…

Opencv 2

这里写目录标题 图像阈值平滑处理形态学 腐蚀操作膨胀操作开运算和闭运算梯度运算礼帽和黑帽图像梯度 sobel算子scharr算子canny边缘检测图像金字塔图像轮廓绘制轮廓轮廓特征轮廓近似边界矩形 模板匹配 图像阈值 平滑处理 均值滤波 blur cv2.blur(img,(3,3)) 相当于平均卷积…

基于Wi-Fi指纹匹配的室内定位方法(附代码)

引言 室内定位技术已广泛应用于商场导航、智能家居、人员搜救等领域&#xff0c;具有不可估量的商业价值和非常广阔的应用前景。全球导航卫星系统&#xff08;GNSS&#xff09;可以为室外定位提供良好的定位精度&#xff0c;然而在室内环境下卫星信号的衰减使得室内的位置信息…

day43|动态规划6-完全背包及其应用-零钱兑换II-组合总和IV

完全背包 前情提要&#xff1a; 0-1背包指的是给定背包重量&#xff0c;将物品放入背包中&#xff0c;使得背包中的物品达到最大的价值。&#xff08;每个物品只能往其中放一次&#xff09; 在0-1背包问题中&#xff0c;第二层for循环需要是倒序遍历才可以保证每个物品只使用一…

Pandas使用技巧

Pandas 是一个强大的数据分析 Python 库&#xff0c;提供了一系列用于数据清洗、转换、分析和可视化的 API。在使用 Pandas 进行数据处理时&#xff0c;常见的指令包括&#xff1a; 数据读取和解析 read_csv()&#xff1a;用于读取 CSV、Excel等格式的数据文件&#xff0c;并将…

大数据:HDFS存储原理,fsck命令查看文件副本状态,namenode元数据,edits流水账,fsimage合并,hdfs读取数据

大数据&#xff1a;HDFS存储原理&#xff0c;fsck命令查看文件副本状态&#xff0c;namenode元数据&#xff0c;edits流水账&#xff0c;fsimage合并&#xff0c;hdfs读取数据 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0…

django业务流程配置

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…