【C++刷题】力扣-#108-将有序数组转换为二叉搜索树

devtools/2024/10/19 22:36:48/

题目描述

给定一个升序排列的整数数组 nums,将其转换为一棵高度平衡的二叉搜索树(BST)。高度平衡的二叉搜索树定义为:一个二叉搜索树,其中左右两个子树的高度差不超过 1。

示例

示例 1

输入: nums = [-10,-3,0,5,9]
输出: [0,-3,9,-10,null,5,null,9]
解释: 如上图所示,高度平衡的二叉搜索树有两个可能的树结构。返回任何一个都是可以的。

示例 2

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

题解

这个问题可以通过递归的方式来解决。基本思路是找到数组的中间元素作为根节点,然后对左右两边的子数组递归执行相同的操作。

  1. 找到中间元素:计算数组的中间索引 mid。
  2. 创建根节点:将 nums[mid] 作为根节点。
  3. 递归构建左右子树:对 mid 左边的子数组和 mid 右边的子数组递归执行相同的操作,分别构建左子树和右子树。
  4. 返回根节点:递归结束后,返回根节点。

代码实现

TreeNode* sortedArrayToBST(vector<int>& nums) {return sortedArrayToBSTHelper(nums, 0, nums.size() - 1);
}TreeNode* sortedArrayToBSTHelper(vector<int>& nums, int start, int end) {if (start > end) return nullptr;int mid = start + (end - start) / 2;TreeNode* root = new TreeNode(nums[mid]);root->left = sortedArrayToBSTHelper(nums, start, mid - 1);root->right = sortedArrayToBSTHelper(nums, mid + 1, end);return root;
}

复杂度分析

● 时间复杂度:O(n),其中 n 是数组 nums 的长度。每个元素都被访问一次。
● 空间复杂度:O(log n),这是因为递归调用的深度是树的高度,对于平衡二叉树,高度大约是 log(n)。
这个算法的优势在于它利用了数组的有序性,通过递归快速构建了二叉搜索树。


http://www.ppmy.cn/devtools/127115.html

相关文章

uboot基础 -- 启动Linux kernel镜像之 booti 命令的用法

U-Boot booti 命令的作用与用法 booti 命令是 U-Boot 中用于引导 Linux 内核的命令&#xff0c;主要用于启动 ARM64 (AArch64) 平台上的内核映像。在现代嵌入式系统中&#xff0c;booti 通常用于启动设备上的 Linux 内核。 1. 基本概念 booti 命令用于引导内核时加载一个二进…

嵌入式学习-IO进程-Day05

嵌入式学习-IO进程-Day05 线程函数接口 线程回收函数 获取线程号 线程同步 概念 线程同步机制 信号量 无名信号量 函数接口 互斥 互斥的概念 互斥锁 函数接口 死锁&#xff08;面试可能会问&#xff09; 条件变量 使用步骤 函数接口 进程间通信 Linux/Unix平台的通信方式发展 进…

基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现

详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不…

JAVA队列

目录 1. 队列(Queue) 2.1 概念 2.2 队列的使用 ​编辑 ​编辑 后入后出 和栈类似 队列同样有 size&#xff08;&#xff09; 和 empty&#xff08;&#xff09;方法 2.3 队列模拟实现 3. 出队列 1. 队列(Queue) 1.1 概念 队列&#xff1a;只允许在一端进行插入数据…

【Vue进阶】第一章——熟悉Vue常用指令:从文本插值到表单绑定

目录 内容主要包含 1.Vue 常用指令介绍 目标 内容讲解 内容小结 2.文本插值v-html 目标 内容讲解 内容小结 3.绑定属性 v-bind:属性名或者 :属性名 (重点) 目标 内容讲解 内容小结 4.条件渲染v-if 目标 内容讲解 内容小结 5.条件渲染v-show 目标 内容讲解…

JavaWeb 19 AJAX

目录 一、什么是AJAX 同步交互和异步交互 同步交互 异步交互 Ajax工作原理 Ajax实现方式 原生JavaScript方式进行ajax(了解)&#xff1a; "我就是希望你好&#xff0c;就像很多人希望我好一样&#xff0c;特别简单&#xff0c;特别真挚。也不为了什么&#xff0c;就是希望…

CST软件超表面--- 偏振片- 线圆极化转换,Floquet端口,S参数算轴比AR

这期我们看一个超表面极化分析&#xff0c;用到Floquet端口模数&#xff0c;S参数读出极化和轴比&#xff0c;还有平面波散射截面等技巧。 使用模板&#xff0c;频率0-25GHz&#xff0c;电场监视器8.06GHz: 画一片PEC&#xff1a; 画第二片PEC&#xff0c;insert到第一片里面&…

ECU 安全启动和安全刷写的技术实现演示案例

场景: 诊断仪将新的应用程序软件下载到ECU中。 假设条件: ECU硬件支持CAN通信。ECU已安装Bootloader软件。诊断仪支持UDS协议和所需的诊断服务。应用程序软件已打包成HEX格式文件。 流程步骤: 预编程步骤: STP1_a: 切换扩展会话 诊断仪发送: $10 03 (功能寻址)ECU响应: $5…