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

news2024/11/22 14:16:56

在这里插入图片描述
一个容易想到的思路:使用 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 None
        mid = l+r >> 1
        ans = 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.coloradmin.cn/o/1512868.html

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

相关文章

10、设计模式之外观模式(Facade)

一、什么是外观模式 这个大家一定是经常使用的,外观模式(门面模式)是一种结构型设计模式。它提供一个统一的接口,用于访问子系统中的一组接口,隐藏了系统的复杂性。最简单的应用就是,当controller层的逻辑处…

19、设计模式之中介者模式(Mediator)

一、什么是中介者模式 中介者模式是一种行为型设计模式,它用于减少对象之间互相通信的复杂性。中介者模式通过创建一个中介者对象,将对象之间的通信集中交给该对象来处理,而不是直接相互交流,是符合迪米特原则的典型应用。 迪米特…

creator-webview加载优化

title: creator-webview加载优化 categories: Cocos2dx tags: [cocos2dx, creator, webview, 优化, 加载, 性能] date: 2024-03-02 13:17:20 comments: false mathjax: true toc: true creator-webview加载优化 前篇 Android WebView shouldInterceptRequest - https://www.ji…

得物布局构建耗时优化方案实践

一、背景 当谈到移动应用程序的体验时,页面启动速度是其中至关重要的一点,更快的页面展示速度确保应用程序可以迅速加载并响应用户的操作, 从而提高用户使用 App 时的满意度。在页面启动的整个流程中,随着 UI 复杂度的上升,布局的…

jmeter发送请求参数如何使用变量

问题描述 发送jmeter请求时,想设置请求参数为变量 解决方法

190基于matlab的tfrSTFT时频分布图

基于matlab的tfrSTFT时频分布图,计算时间序列的STFT时频分布图,得到瞬时频率。通过GUI可以调节图像的展示样式。程序已调通,可直接运行。 190 STFT时频分布图 瞬时频率 能量谱 (xiaohongshu.com)

剪切板工具Ditto

https://github.com/sabrogden/Ditto/releases 1.开源免费Ditto 快捷键 ctrl (j键盘 esc下面的符号) 挺好用的,解决问题 投标中需要重复填写的内容,可以通过他进行 实时复制信息 2.windows自带的黏贴板工具 win键v调出快捷键

数字孪生+工业互联网标识解析,打造智能工厂新标杆!

当前,工业4.0浪潮愈发澎湃,加快数字化、网络化、智能化发展成为了制造业转型升级的必然要求。 51WORLD基于数字孪生技术与工业互联网标识解析体系,打造了一个集协同化供应、个性化定制、智能化生产于一体的全连接产线孪生平台(以…

电脑记事本分类密码怎么设置?记事本备忘录分类密码设置方法

身为一名文字工作者,我每天都需要在电脑上记录大量的信息和灵感。电脑记事本备忘录对我来说,就像是一位随时待命的助手,帮助我捕捉每一个稍纵即逝的想法。然而,在开放的办公环境中,我总有些隐隐的担忧——毕竟&#xf…

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例

【Python】新手入门学习:详细介绍组合/聚合复用原则(CARP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集…

Affinity Photo:像素大师,影像重塑者 mac/win版

在数字图像处理领域,Affinity Photo已经崭露头角,成为许多专业摄影师和图像设计师的首 选工具。这款软件不仅具备丰富的功能和强大的性能,还提供了直观易用的操作界面,让用户能够轻松实现高质量的图像处理。 Affinity Photo 软件…

通过el-select选择器和el-tree树形结构二次封装(vue2+elementUI),开发element-plus的TreeSelect树形选择器

需求: 领导看我在另一个vue3项目的el-tree-select挺好的,叫我移入vue2的项目中。 但是vue2版本的elementUI,并没有这个组件,所以只能自己找,找半天找不到和它差不多的,通过网友写的组件改写的 参考链接&…

vMware WorkStation创建虚拟机安装CentOS7,NAT模式配置网络

一、安装虚拟机 1、选择典型(推荐)配置 2、选择稍后安装操作系统 3、操作系统选择CentOS7 64位 4、虚拟机命名、选择安装位置 6、指定磁盘容量 7、指定磁盘容量 步骤: (1)、系统内存2GB (2)、…

c++中string的模拟实现(超详细!!!)

1.string的成员变量、(拷贝)构造、析构函数 1.1.成员变量 private:char* _str;size_t _size; //string中有效字符个数size_t _capacity; //string中能存储有效字符个数的大小 1.2(拷贝)构造函数 //构造函数string(const char* …

IDEA 2022.1以上版本 配置使用新UI

1、进入此页面的快捷建CtrlAltShift/ 2、新UI配置 3、原设置

算法练习:二分查找

目录 1. 朴素二分查找2. 在排序数组中查找元素的第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰值索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 1. 朴素二分查找 题目信息: 题目链接: 二分查找二分查找的使用前提为数据具有&…

System类 --java学习笔记

System System代表程序所在的系统,也是一个工具类 常见System方法: 按照惯例,exit括号中非零状态码表示异常终止,填零则表示人为终止 currentTimeMillis()返回的是long类型的时间毫秒值:指的…

iOS增量报告生成方案

一,iOS覆盖率报告生成逻辑 iOS覆盖率报告生成与Android有很大的不同,主要的生成逻辑如下: 1,将profraw文件,通过命令xcrun llvm-profdata merge -sparse转换成profdata; 2,再将profdata文件,通…

SCI 机器视觉领域期刊,审稿周期

(1)pattern recognition letters, 从投稿到发表,一年半时间 (2)Pattern recognition 不好中,时间长 (3)IEICE Transactions on Information and Systems, 作者中有一个必须是会员。收费高,审稿快。影响因子0.4 (4)Internationa…

SpringBoot实战项目——博客笔记项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、项目介绍二、项目的整体框架 2.1 数据库模块 2.2 前端模块 2.3 后端模块三、项目图片展示四、项目的实现 4.1 准备工作 4.…