LeetCode108题:将有序数组转换为二叉搜索树(python3)

在这里插入图片描述
一个容易想到的思路:使用 nums 中最靠近中心的位置作为整棵 BST 的根节点,确保左右子树节点数量平衡。随后递归构造 nums 中下标范围为 [0,mid−1]作为左子树,递归构造 nums 中下标范围为 [mid+1,n−1]作为右子树。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:return self.build(nums,0,len(nums)-1)def build(self,nums,l,r):if l>r:return Nonemid = l+r >> 1ans = TreeNode(nums[mid])ans.left = self.build(nums,l,mid-1)ans.right = self.build(nums,mid+1,r)return ans

在这里插入图片描述

注意,遍历的时候,记住一个关键点:我们遍历的是树而不是节点。具体说:每次遍历的时候,要把子树看成一个整体,比如我们来看一个最大的格局:爸爸节点是1号,那么左子树是2、4、5、7、8整个整体,右子树是3、6、9、10整个整体,在这个最大格局上进行遍历,那就是左子树整体->1号->右子树整体;所以我们现在知道要从左子树开始,那么左子树也要遵循中序遍历,所以顺序应该是4、7整体 -> 2 -> 5、8整体,然后进入1,然后进入右子树,右子树也遵循中序遍历:空白(3开头的右子树并没有左边部分) -> 3 -> 6、9、10整体。依此类推,如果你能理解完整的顺序:4、7、2、8、5、1、3、9、6、10,说明你已经理解了中序遍历,记住每次进入一个子树的时候,不要急着先遍历这个子树的爸爸,每个子树也都是要从左边开始才能是中序遍历的!这部分借鉴,写的非常清楚。

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

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

相关文章

I2C学习总结

i2c概述 I2C(Inter-Intergreted Circuit) 是一种串行通信协议,用于集成电路之间完成数据传输,i2c用广泛用以各种领域,包括电子设备、嵌入式系统、工业自动化等; i2c仅仅只是一个数据传输的协议&#xff0c…

【精解前端八股手写题】深入浅出柯里化

柯里化模板 柯里化是什么基本概念偏函数 柯里化有什么用场景1:拆分计算场景2:工厂函数 如何实现柯里化基础学习版:新人入门极简精华版:一行代码魔改升级版:闭包乱炖 柯里化是什么 基本概念 前端中的柯里化&#xff0…

逻辑斯特 + 神经网络梯度下降公式推导 + 向量化

全部推导来自吴恩达老师的视频课,下面仅作整理 逻辑斯特 神经网络

Vue+OpenLayers7入门到实战:使用webgl图层叠加超大量Point点要素,解决叠加超过一百万数据量点位导致浏览器卡住变慢的问题

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7 前言 本章介绍如何使用OpenLayers7在解决地图上叠加超过几千以上要素点就开始变慢,一万以上的要素点的时候,浏览器页面就开始卡顿或直接卡死,甚至浏览器会弹出是否等待页面加载的提示。 这时候要怎么优化?OpenLayers官…

win10安装Ubuntu22.04LTS及深度学习相关配置详细教学

由于之前Ubuntu系统硬盘空间分配的不够,又去看了一下发现扩容很很麻烦。加以发现自己前面安装的深度学习环境版本与实际要用的不符,所以当机立断决定直接重装系统。 Ubuntu系统安装 参考视频:一看就会!8分钟真机安装【Ubuntu/Wi…

JWT原理

JWT 介绍 JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种简洁的、自包含的方法用于通信双方之间以 JSON 对象的形式安全地传输信息。这种信息可以被验证和信任,因为它是数字签名的。JWT通常用于…

Android Selinux详解[四]--新增服务标签相关

在工作过程中,SElinux常用的有以下几个文件可用于新增标签 可用于加标签的文件名含义对应的声明文件名(一般会声明的地方,根本上放哪里都可以)file_contexts给 文件/目录/节点 新增标签file.tegenfs_contexts给节点新增标签,与上一个不同的是…

SpringBoot总结-基于SpringBoot实现Web开发

原创作者:田超凡(程序员田宝宝) 版权所有,转载请注明原作者,严禁复制转载 3.1、静态资源访问 在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。 默认配置 Spring Boot默认提供静态资…

第二证券|沪指窄幅震荡跌0.26%,半导体概念走强,保险板块跌幅居前

13日早盘,沪深两市窄幅震动,三大指数均小幅跌落。盘面上,人工智能方向团体反弹,半导体个股走势活跃。 到午间收盘,沪指跌0.26%,报3047.85点;深成指跌0.15%,报9615.92点;…

ruoyi-vue插件集成websocket

链接:插件集成 | RuoYi WebSocketServer.java:补充代码 /*** 此为广播消息* param message 消息内容*/public void sendAllMessage(String message) {LOGGER.info("【websocket.sendAllMessage】广播消息:"message);try {for(String sessionI…

工作中Promise用法总结

工作中Promise用法总结,后面会持续更新觉得有意义的。 1.构造Promise 一般情况下代码是这样的: async function fn() {return new Promise((resolve, reject) > {let list []resolve(list)} }await fn()最后的返回值,如果promise的状态…

谈谈杭州某小公司面试的经历

#面试#本人bg211本,一段实习,前几天面了杭州某小厂公司,直接给我干无语了! 1、先介绍介绍你自己,我说了我的一个情况。 2、没获奖和竞赛经历吗?我说确实没有呢,面试官叹气了一下,只是…

300分钟吃透分布式缓存-27讲:Redis是如何进行主从复制的?

Redis 复制原理 为了避免单点故障,数据存储需要进行多副本构建。同时由于 Redis 的核心操作是单线程模型的,单个 Redis 实例能处理的请求 TPS 有限。因此 Redis 自面世起,基本就提供了复制功能,而且对复制策略不断进行优化。 通…

基于SWOT的智能手机企业财务战略研究1.62

摘 要 近些年,网络技术日新月异,智能手机深受消费者喜爱,人们通过网络,手机应用,可以极大地方便人们学习,工作等等。由于国家对电信行业的大力支持,中国消费者群体逐步成为最具潜力的手机购买者…

十六、接口隔离原则、反射、依赖注入

接口隔离原则、反射、特性、依赖注入 接口隔离原则 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。 五种原则当中的i 上一章中的接口,即契约。 契约就是在说两件事,甲方说自己不会多要,乙方会在…

朴素贝叶斯算法基础——案例:对新闻进行分类

贝叶斯公式 朴素:假设特征与特征之间相互独立 朴素贝叶斯算法:朴素贝叶斯 应用场景:文本分类(单词作为特征) 拉普拉斯平滑系数 Ni:F1词在C类别所有文档中出现的次数 N:所属类别C下的文档所…

《C++游戏编程入门》第2章 真值、分支与游戏循环: Guess My Number

《C游戏编程入门》第2章 真值、分支与游戏循环: Guess My Number 2.1 关系运算符2.2 条件语句02.score_rater.cpp02.score_rater2.cpp02.score_rater3.cpp 2.5 switch语句02.menu_chooser.cpp 2.6 while循环02.play_again.cpp 2.7 do循环02.play_again2.cpp 2.8 break和continu…

AHU 数据库 实验三

《数据库》实验报告 【实验名称】 实验3 数据库的连接查询 【实验目的】 1. 熟悉基本的连接查询的概念和作用; 2. 了解数据库管理系统DBMS 实现连接查询的基本方法; 3. 掌握SQL语言连接查询语句的语法和功能&#…

.NET CORE Aws S3 使用

1.安装指定的包 Install-Package AWSSDK.S3 -Version 3.3.104.10 2.使用帮助类 using System; using System.Collections.Generic; using System.Text; using Amazon; using Amazon.Runtime; using Amazon.S3; using Amazon.S3.Model; using System.IO; using System.Threadi…

Spring存储基础知识

一、对象存储 1.创建bean对象 public class User {public void sayHi() {System.out.println("hi student");} } 2.bean存入Spring 在spring-config.xml,将 bean(com.spring.demo.User)存到 Spring 容器中,它的名称…