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

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

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

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

示例 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 ≤ n u m s . l e n g t h ≤ 1 0 4 1 \leq nums.length \leq 10^4 1nums.length104
  • − 1 0 4 ≤ n u m s [ i ] ≤ 1 0 4 -10^4 \leq nums[i] \leq 10^4 104nums[i]104
  • nums严格递增 顺序排列

解法一(递归+模拟)

思路分析:

  1. 根据二叉搜索树的特点,左子树节点小于中间节点,且右子树节点大于中间节点
  2. 且题目给出数组为严格递增序列,且要求构造的二叉搜索树是 高度平衡的二叉搜索树
  3. 所以很显然,构造二叉树时,应该将数组中间的数值作为根节点
  4. 考虑使用递归的方式构造,首先思考递归的返回值和参数,因为需要获得一个二叉搜索树,所以返回值类型为TreeNode,然后传递的参数,需要有数组参数以及数组的左右节点,确定转化的序列
  5. 然后思考递归的边界条件,即当数组的左边界大于右边界时,不需要再构造,返回null
  6. 然后确定递归的一般过程,即根据数组左右边界确定构造二叉树的根节点,然后再构造左右子树

实现代码如下:

class Solution {public TreeNode sortedArrayToBST(int[] nums) {return toBSTBySortArray(nums, 0, nums.length-1);	// 注意转递区间为左闭右闭区间}private TreeNode toBSTBySortArray(int[] nums, int left, int right) {if (left > right)return null;	// 说明此时为空数组int rootValIndex = ((right - left) >> 1) + left;	// 获取根节点的索引TreeNode root = new TreeNode(nums[rootValIndex]);root.left = toBSTBySortArray(nums, left, rootValIndex-1);	// 构造左子树root.right = toBSTBySortArray(nums, rootValIndex+1, right);	// 构造右子树return root;}
}

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:42.1 MB,击败了65.39% 的Java用户

复杂度分析:

  • 时间复杂度: O ( N ) O(N) O(N)N指数组的长度
  • 空间复杂度: O ( l o g 2 N ) O(log^{N}_2) O(log2N)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

筛选树形菜单时关联其父节点和子节点

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 树形菜单 在很多系统管理/菜单管理中经常会出现下面这样的树形菜单,它是通过前端的Tree组…

如何让光猫4个网口都有网络

一般情况光猫只有LAN1口有网络,LAN2、LAN3和LAN4口都是预留给电视用的,那么如何让这3个网口也有网络呢? 使用场景: 光猫在弱电箱内,弱电箱中有三根网线(网线1、网线2和网线3)分别接入到了三个房…

宝塔面板 -- 打包前端项目并部署提升访问速度

文章目录 前言一、打包前端项目二、添加PHP项目三、部署打包文件四、开通防火墙五、运行网站总结 前言 在前面写到的文章使用宝塔面板部署前端项目中,并没有将前端项目打包而是直接部署,导致网站访问速度非常慢,加载甚至要十几秒。因此&…

文献学习-25-综合学习和适应性教学:用于病理性胶质瘤分级的多模态知识蒸馏

Comprehensive learning and adaptive teaching: Distilling multi-modal knowledge for pathological glioma grading Authors: Xiaohan Xing , Meilu Zhu , Zhen Chen , Yixuan Yuan Source: Medical Image Analysis 91 (2024) 102990 Key words: 知识蒸馏、模态缺失、胶质瘤…

docker部署DOS游戏

下载镜像 docker pull registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docker:latestdocker-compose部署 vim docker-compose.yml version: 3 services:dosgame:container_name: dosgameimage: registry.cn-beijing.aliyuncs.com/wuxingge123/dosgame-web-docke…

新增收货地址

目录 🧂1.创建controller层 🥓2.创建service层 🌭3.注意细节 🍿4.避免dao数据暴漏 1.创建controller层 controller不做逻辑操作,只接受前端的数据 1.添加Api设置swagger模块名称2.RestController以json形式返回…

Spring Boot项目启动速度优化

1、配置自动配置排除列表,减少启动自动配置扫描,配置项spring.autoconfigure.exclude 2、启动类添加索引注解Indexed,去除启动过程中 Components 的扫描步骤,直接从索引文件读取。 import org.springframework.stereotype.lndexe…

DXP学习3-单片机时钟显示系统的层次原理图设计

目录 一,自上而下的子母图设计 1,绘制层次式电路母图 1)工程及原理图创建和保存 2)开始绘制层次式母图main.SchDoc 2,绘制图纸符号 1)properties选项卡 2)designator标号 3)filename文件名 4&…

双目测距项目 | 在Jetson-Nano平台上部署SGBM深度测距+YOLOv5目标检测算法

项目应用场景 面向在 Jetson Nano 平台上部署 SGBM 深度测距和基于 YOLOv5 的目标检测算法,实现双目测距的功能。 项目流程与效果: 项目细节 > 具体参见项目 README.md项目获取 https://download.csdn.net/download/weixin_42405819/89051043

直方图均衡化的本质

Rafael C. Gonzalez “Digital Image Processing”的错误 直方图均衡化的本质是灰度级分布的近邻映射,这部分的内容全错。总有些人崇洋媚外。 我修改了相关的内容,参阅禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程…

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

【WiFi开发全攻略】WIFI常用工具汇总

我的圈子: 高级工程师聚集地 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得! …