【Python刷题】将有序数组转换为二叉搜索树

news2024/11/24 2:33:51

问题描述

给你一个整数数组 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] 都是高度平衡二叉搜索树。

解决办法

因为是平衡二叉树,所以总是要选取中间节点,比如在示例一中[-10,-3,0,5,9],先选取中间节点0,然后再分别同时选取两边数字的左侧[-10,5]或者右侧[-3,9]节点 。

  • 中序遍历,总是选择中间位置左边的数字作为根节点
  • 中间位置左边的数字作为根节点,则根节点的下标为mid=(left+right)//2
    具体实现步骤:
  • 对数组的下标进行遍历,首先排除特殊情况,定义左右边界下标,如果左边的索引大于右边的索引,则返回None
  • 第二个特殊情况,如果左右数的索引相等,那么说明只有一个根结点,则建立一个只有根结点的树
  • 排除掉这两中情况后,选取中间节点,即mid=[l+r]//2,将其设置为根结点
  • 再分别采用递归的方法设置左子树和右子树

代码示例

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> Optional[TreeNode]:
        def arrayToBst(l,r):
            if l > r:
                return None
            if l == r:
                return TreeNode(nums[l],None,None)  #建立一棵树,左、右子树都为空
            else:
                mid = ( l + r ) // 2
                root=TreeNode(nums[mid])
                root.left = arrayToBst(l,mid-1)
                root.right = arrayToBst(mid+1,r)
                return root
        return arrayToBst(0,len(nums)-1)

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

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

相关文章

MVC与三层架构理解

1. JSP的发展 早期只有Servlet,只能使用response输出标签数据,非常麻烦后来。JSP的出现,简化了 Servlet的开发。但是过度的使用JSP,在JSP中写大量的java代码,又前端的页面,造成难以维护,难于分…

pytorch-tpu/llama推理优化之input prompt bucketing

数据更新: python脚本(注意分支): HLO图分析KV-Cache更新: KV-Cache作为HLO图的输入输出:bf16[1,2048,32,128]{3,2,1,0} 128x, 2x32x2 参考链接 notes for transformer introduction by an Italian t…

HUAWEI 华为交换机 配置 Eth-Trunk 接口流量本地优先转发示例(堆叠)

组网需求 说明 S5720I-10X-PWH-SI-AC 和 S5720I-6X-PWH-SI-AC 不支持此配置。 如 图 3-23 所示,为了增加设备的容量采用设备堆叠技术,将 Switch3 和 Switch4通过专用的堆叠电缆链接起来,对外呈现为一台逻辑交换机。为了实现设备间的备份、…

四、MySQL数据库基础(约束详解!)

一、约束 (一)约束概述 1.概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。 2.目的:保证数据库中数据的正确、有效性和完整性。 3。分类: 注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添…

OpenHarmony实战开发-如何使用rating组件实现星级打分功能。

介绍 本篇Codelab将引导开发者使用rating组件实现星级打分功能。 相关概念 rating组件:评分条,可根据用户判断进行打分。 环境搭建 软件要求 DevEco Studio版本:DevEco Studio 3.1 Release及以上版本。OpenHarmony SDK版本:A…

vuepress-theme-hope 添加谷歌统计代码

最近做了个网站,从 cloudflare 来看访问量,过去 30 天访问量竟然有 1.32k 给我整懵逼了,我寻思不应该呀,毕竟这个网站内容还在慢慢补充中,也没告诉别人,怎么就这么多访问?搜索了下, cloudflare 还会把爬虫的请求也就算进来,所以数据相对来说就不是很准确 想到了把 Google An…

css酷炫边框

边框一 .leftClass {background: #000;/* -webkit-animation: twinkling 1s infinite ease-in-out; 1秒钟的开始结束都慢的无限次动画 */ } .leftClass::before {content: "";width: 104%;height: 102%;border-radius: 8px;background-image: linear-gradient(var(…

稀碎从零算法笔记Day36-LeetCode:H指数

有点绕的一个题,题目描述的有点奇怪(可以看下英文?) 题型:数组、模拟 链接:274. H 指数 - 力扣(LeetCode) 来源:LeetCode 题目描述 给你一个整数数组 citations &am…

如何查找局域网内连接设备的IP地址?

如何查找局域网内连接设备的IP地址? 第一种方法:通过CMD指令 在电脑开始菜单中找到运行,点击打开,输入CMD,然后回车,如下图所示, 如下图所示,输入ipconfig/all,然后回车, 如下图所示,此时会扫描出所有的连接设备的IP地址、MAC地址以及网关等信息, 这时候在cmd命令窗…

php反序列化漏洞——phar反序列化漏洞

一.什么是phar文件 类比java语言 JAR是开发Java程序一个应用,包括所有的可执行、可访问的文件,都打包进了一个JAR文件里使得部署过程十分简单。 PHAR("Php ARchive")是PHP里类似于JAR的一种打包文件 对于PHP 5.3 或更高版本,Ph…

前端常用代码整理— js,jquery篇(3)

目录 1.判断是否是json字符串 2.获取当前网址 3.将文本复制到剪贴板 4.获取一个月的天数 5.展平数组 6.要修改getRandomItem函数以返回数组中的随机两个元素,可以尝试以下代码 1.判断是否是json字符串 const isJson str > {try {JSON.parse(str);return …

STM32之HAL开发——QSPI协议介绍

QSPI协议 OSPI是Oueued SPl的简写,是Motorola公司推出的 SPI接口的扩展,比SPI应用更加广泛。在 SPI协议的基础上,Motorola公司对其功能进行了增强,增加了队列传输机制,推出了队列串行外围接口协议(即 OSPI协议)。OSPI…

微服务(基础篇-008-es、kibana安装)

目录 05-初识ES-安装es_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p81&vd_source60a35a11f813c6dff0b76089e5e138cc 1.部署单点es 1.1.创建网络 1.2.加载镜像 1.3.运行 2.部署kibana 2.1.部署 2.2.DevTools 3.安装IK分词器 3.1.在线安装ik…

机器学习 - 手动实现 ReLU 和 Sigmoid

直接上代码 import torch import matplotlib.pyplot as pltA torch.arange(-10, 10, 1, dtypetorch.float(32)) def relu(x):return torch.maximum(torch.tensor(0), x) plt.plot(relu(A))结果如下: import torch import matplotlib.pyplot as pltA torch.aran…

基于架构的软件开发方法_1.概述和相关概念及术语

1.体系结构的设计方法概述 基于体系结构的软件设计(Architecture-Based Software Design,ABSD)方法。ABSD方法是由体系结构驱动的,即指由构成体系结构的商业、质量和功能需求的组合驱动的。 使用ABSD方法,设计活动可以…

Reversing Linked List

Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K3, then you must output 3→2→1→6→5→4; if K4, you must output 4→3→2→1→5→6. Input Specifi…

Ubuntu joystick 测试手柄 xbox

Ubuntu joystick 测试手柄 xbox 测试使用Ubuntu20.04 测试环境在工控机 安装测试 实际测试使用的手柄是北通阿修罗2pro 兼容xbox Ubuntu20.04主机 连接手柄或者无线接收器后查看是否已经检测到: ls /dev/input找到输入中的 js0 即为手柄输入 需要安装joysti…

new mars3d.layer.XyzLayer({的rectangle瓦片数据的矩形区域范围说明

new mars3d.layer.XyzLayer({的rectangle瓦片数据的矩形区域范围说明 2.这个xyz图层的矩形区域范围rectangle从图层文件中无法获取,但是看图层文件可以知道这个是12-21级的数据。 3.一般这个图层数据文件服务会有提供相应的rectangle范围,在服务的xml文…

Centos 7 安装通过yum安装google浏览器

在CentOS 7上使用yum安装Google Chrome浏览器稍微复杂一些,因为Chrome并不直接包含在默认的Yum仓库中。按照以下步骤来操作: 1、添加Google Chrome仓库 首先,您需要手动添加Google Chrome的Yum仓库。打开终端,并使用文本编辑器&a…

NAT地址转换内外网通信

实验要求:内网地址通过nat转换成外网地址,联通外网服务器,达到内网外网互通 拓扑结构: 配置完成后,在ar1的G1口设置抓包,在pc1设备上ping ar2的地址,通过查看抓包信息,可以看到访问…