当前位置: 首页 > news >正文

leetcode每日一练-第108题-将有序数组转换为二叉搜索树

 

 

一、思路

递归

二、解题方法

在给定中序遍历序列数组的情况下,每一个子树中的数字在数组中一定是连续的,因此可以通过数组下标范围确定子树包含的数字,下标范围记为 [left,right]。对于整个中序遍历序列,下标范围从 left=0到 right=nums.size()−1。当 left>right 时,平衡二叉搜索树为空。

选择中间位置左边的数字作为根节点

三、code

class Solution {
public:TreeNode* sortedArrayToBST(vector<int>& nums) {return helper(nums,0,nums.size()-1);}TreeNode* helper(vector<int>& nums,int left,int right){if(left>right)//当左边界 left 大于右边界 right 时,意味着当前处理的区间为空,即没有元素可以用来构建子树了。这种情况下,我们返回 nullptr,表示当前子树为空树。{return nullptr;}int mid=(left+right+1)/2;//计算当前处理区间的中间位置,总是选择中间位置左边的数字作为根节点。这样可以保证构建的二叉搜索树是高度平衡的。TreeNode* root=new TreeNode(nums[mid]);//创建当前区间中间位置的元素值为根节点的二叉树节点。root->left=helper(nums,left,mid-1);//递归构建当前根节点的左子树,将左边界设为 left,右边界设为中间位置的前一个位置 mid - 1。root->right=helper(nums,mid+1,right);//递归构建当前根节点的右子树,将左边界设为中间位置的后一个位置 mid + 1,右边界设为 right。return root;}
};

 =========================================================================学到的知识:

前序遍历(Preorder Traversal):在二叉树中,先访问根节点,然后按照左子树、右子树的顺序递归遍历子树。在前序遍历中,根节点的访问顺序是最先的。

中序遍历(Inorder Traversal):在二叉树中,先按照左子树、根节点、右子树的顺序递归遍历子树。在中序遍历中,根节点的访问顺序位于左右子树之间。

后序遍历(Postorder Traversal):在二叉树中,先按照左子树、右子树、根节点的顺序递归遍历子树。在后序遍历中,根节点的访问顺序是最后的。

这三种遍历方式是深度优先搜索(DFS)的三种不同变种。它们分别有不同的应用场景:

  • 前序遍历:适用于需要先处理根节点再处理子节点的场景,比如复制整个树的结构或序列化为字符串。
  • 中序遍历:适用于二叉搜索树,可以将其按从小到大的顺序输出,比如查找树中第 k 小的元素。
  • 后序遍历:适用于释放二叉树的内存,先释放子节点再释放根节点,以防止访问已经释放的内存。

TreeNode* root = new TreeNode(nums[mid]);

这行代码用于创建一个新的二叉树节点,并将其值初始化为有序数组中间位置的元素 nums[mid] 

相关文章:

leetcode每日一练-第108题-将有序数组转换为二叉搜索树

一、思路 递归 二、解题方法 在给定中序遍历序列数组的情况下&#xff0c;每一个子树中的数字在数组中一定是连续的&#xff0c;因此可以通过数组下标范围确定子树包含的数字&#xff0c;下标范围记为 [left,right]。对于整个中序遍历序列&#xff0c;下标范围从 left0到 ri…...

王道《操作系统》学习(二)—— 进程管理(二)

2.1 处理机调度的概念、层次 2.1.1 调度的基本概念 2.1.2 调度的三个层次 &#xff08;1&#xff09;高级调度&#xff08;作业调度&#xff09; &#xff08;2&#xff09;中级调度&#xff08;内存调度&#xff09; 补充知识&#xff1a;进程的挂起状态和七状态模型 &#x…...

Vulnhub: shenron: 3靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.171 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.171 修改hosts后访问目标80端口&#xff0c;发现是wordpress wpscan收集目标用户&#xff0c;爆破出密码&#xff1a;ilov…...

Kubernetes高可用集群二进制部署(二)ETCD集群部署

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

mysql主从复制及原理

目录 主从复制原理实现主从复制 主从复制原理 主要基于MySQL二进制日志 主要包括三个线程&#xff08;2个I/O线程&#xff0c;1个SQL线程&#xff09; 1、MySQL将数据变化记录到二进制日志中&#xff1b; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中&#xff1b; …...

MQTT服务器详细介绍:连接物联网的通信枢纽

随着物联网技术的不断发展&#xff0c;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议作为一种轻量级、可靠、灵活的通信协议&#xff0c;被广泛应用于物联网领域。在MQTT系统中&#xff0c;MQTT服务器扮演着重要的角色&#xff0c;作为连接物联网设备和…...

通过VBA宏合并Excel工作表

工作中经常会用到的把几个Excel文件合并到一个&#xff0c;或者是把一个Excel文件里的所有Sheet合并到一个Sheet来进行统计。下面分别提供用vba宏来解决这两个问题的方法。 1、合并Excel文件 打开一个空Excel文件&#xff0c;AltF11&#xff0c;插入一个模块&#xff0c;开始…...

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…...

Redis主从复制、哨兵机制、集群分片

目录 一.主从复制 1.概述 2.主从架构相比于单点架构的优势 3.主从复制原理和工作流程 第一次同步 第一阶段&#xff1a;建立链接、协商同步 第二阶段&#xff1a;主服务器同步数据给从服务器 第三阶段&#xff1a;主服务器发送新写操作命令给从服务器 基于长连接的命…...

字段填充策略 FieldFill

实体类中有如下属性&#xff0c;通过上面的自动填充属性&#xff0c;我们可以实现在进行插入&#xff08;insert&#xff09;操作时对添加了注解TableField(fill FieldFill.INSERT)的字段进行自动填充&#xff08;解释&#xff1a;后面会写配置自动填充的配置类&#xff0c;该…...

Docker run 启动容器报错

今天在Windows下启动docker容器发现的三个错误&#xff1a; Ports are not available: exposing port TCP 0.0.0.0:1521 -> 0.0.0.0:0: listen tcp 0.0.0.0:1521: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 端口…...

Golang之路---03 面向对象——类型断言

类型断言 作用 检查 i 是否为 nil检查 i 存储的值是否为某个类型 使用方式 第一种&#xff1a; t : i.(T)这个表达式可以断言一个接口对象&#xff08;i&#xff09;里不是 nil&#xff0c;并且接口对象&#xff08;i&#xff09;存储的值的类型是 T&#xff0c;如果断言成…...

Atcoder 做题记录

My OI Blog A R C 155 F \mathbb{ARC \ 155 \ F} ARC 155 F E, F 先咕着&#xff0c;做一些多项式题&#xff0c;这篇题解是我人工翻译的 [1] Double Counting 双重计数 考虑从叶子节点开始&#xff0c;用唯一的方式&#xff08;如果有的话&#xff09;来构造出一棵满足条件的树…...

C++之观察者模式(发布-订阅)

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式&#xff08;Observer Pattern&#xff09;&#xff0c;也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系&#xff0c; …...

无头单链表,有完整测试程序

&#x1f35f;无头单链表 &#x1f47b;无头单链表的所有结点都存储有效信息 &#x1f47b;无头单链表相对带头单链表&#xff0c;在有些涉及更改头节点的函数上需要传二级指针 &#x1f35f;头文件list.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #includ…...

2023年第四届“华数杯”数学建模思路 - 案例:FPTree-频繁模式树算法

## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c;他与Apriori算法一样也是用来挖掘频繁项集的&#xff0c…...

MySQL做分布式锁

分布式锁mysql实现方式 方式1&#xff1a;唯一索引 创建锁表&#xff0c;内部存在字段表示资源名及资源描述&#xff0c;同一资源名使用数据库唯一性限制。多个进程同时往数据库锁表中写入对某个资源的占有记录&#xff0c;当某个进程成功写入时则表示其获取锁成功其他进程由于…...

Python学习笔记:变量类型、字符串基本操作

1.注释 单行注释 # 单行注释 多行注释 """ 多行注释 """2.变量类型 # 基本变量类型 a 1 # integer b 1.5 # float c string # String d "string" # string e False # boolean # list\tuple\dictionar…...

JVM的组件、自动垃圾回收的工作原理、分代垃圾回收过程、可用的垃圾回收器类型

详细画的jvm模型图 https://www.processon.com/diagraming/64c8aa11c07d99075d934311 官方网址 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时&#xff0c;这会导致m…...

【elementui】解决el-select组件失去焦点blur事件每次获取的是上一次选中值的问题

目录 【问题描述】 【问题摘要】 【分析问题】 【完整Test代码】 【封装自定义指令】 ↑↑↑↑↑↑↑↑↑↑↑↑ 不想看解决问题过程的可点击上方【封装自定义指令】目录直接跳转获取结果即可~~~ 【问题描述】 一位朋友遇到这么一个开发场景&#xff1a;在表格里面嵌入el-…...

【2024 AGI技术成熟度白皮书】:12项核心指标首次量化评估,仅2项达Gartner Hype Cycle峰值前夜

第一章&#xff1a;AGI的技术瓶颈与突破方向 2026奇点智能技术大会(https://ml-summit.org) 当前通用人工智能&#xff08;AGI&#xff09;仍受限于认知架构的不完备性、跨域迁移的脆弱性以及因果推理的符号—神经鸿沟。尽管大语言模型在模式覆盖上取得显著进展&#xff0c;其…...

OpenClaw 这样卸载才够干净,全程 5 大步

大家好&#xff0c;这里是小凡 AI 研习社&#xff0c;我是小凡。 之前在《安装教程》和《安装教程补充版》中&#xff0c;我们详细讲解了 OpenClaw 的安装流程&#xff0c;本节课就来完整介绍它的卸载方法。 一、哪些地方有 OpenClaw 的相关内容&#xff1f; OpenClaw 要想卸…...

NNCF量化避坑指南:OpenVINO模型精度不掉速的5个关键配置

NNCF量化避坑指南&#xff1a;OpenVINO模型精度不掉速的5个关键配置 在工业级AI部署中&#xff0c;模型量化是提升推理效率的必经之路&#xff0c;但精度损失往往成为工程师的噩梦。上周团队在部署YOLOv8时&#xff0c;就因量化参数配置不当导致mAP下降12%&#xff0c;不得不连…...

保姆级教程:用闲置旧电脑+VMware ESXi 6.7,打造你的第一台家庭虚拟化服务器

零成本打造家庭虚拟化实验室&#xff1a;闲置电脑ESXi实战指南 你是否曾想过将家中那台积灰的旧电脑改造成能同时运行多个操作系统的虚拟化平台&#xff1f;或许你只是需要一个简单的开发测试环境&#xff0c;或是想搭建家庭媒体中心&#xff0c;又或者纯粹出于对技术的热爱。本…...

从单目到双目:利用aruco_ros和USB相机实现低成本机器人室内定位全流程

从单目到双目&#xff1a;低成本机器人室内定位系统实战指南 去年在为一个仓储AGV项目做POC验证时&#xff0c;客户提出了一个看似矛盾的需求&#xff1a;既要实现厘米级定位精度&#xff0c;又要求硬件成本控制在千元以内。面对这个挑战&#xff0c;我们最终选择了ArUco二维码…...

用手机学Java编程?AIDE保姆级入门指南,从零到第一个小游戏

用手机学Java编程&#xff1f;AIDE保姆级入门指南&#xff0c;从零到第一个小游戏 地铁上掏出手机刷短视频&#xff1f;不如试试用碎片时间写代码。AIDE这款Android平台的集成开发环境&#xff0c;让Java学习摆脱了电脑束缚——你完全可以在通勤路上完成从"Hello World&qu…...

如何快速将B站缓存视频转换为MP4:m4s-converter终极指南

如何快速将B站缓存视频转换为MP4&#xff1a;m4s-converter终极指南 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经在B站缓存了珍贵的…...

XHS-Downloader:小红书内容管理解决方案,3种方式高效采集无水印素材

XHS-Downloader&#xff1a;小红书内容管理解决方案&#xff0c;3种方式高效采集无水印素材 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜…...

从响应头到恶意请求:手把手教你三种手工识别WAF的‘土方法’,比工具更隐蔽

从响应头到恶意请求&#xff1a;手工识别WAF的三种隐蔽技巧 在Web安全测试中&#xff0c;了解目标网站是否部署了WAF&#xff08;Web应用防火墙&#xff09;是至关重要的一步。与依赖自动化工具不同&#xff0c;手工识别方法更加隐蔽&#xff0c;特别适合在环境受限或需要保持低…...

别再手动配置了!Dify插件市场(Marketplace)的3个高效安装技巧与实战避坑

别再手动配置了&#xff01;Dify插件市场(Marketplace)的3个高效安装技巧与实战避坑 当团队协作规模扩大到5个以上Workspace时&#xff0c;插件管理就会从便利工具变成运维噩梦。上周处理的一个典型案例&#xff1a;某AI中台团队在同步更新20个Workspace的Google Search插件时&…...