代码随想录算法训练营第十八天(py)| 二叉树 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654.最大二叉树

力扣链接
给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:
二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。

思路

构建树一般采用前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。

class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:# 如果数组就剩一个元素,就是到叶子节点了# 定义一个新节点if len(nums)==1:return TreeNode(nums[0]) # 1.找到数组中最大的值和对应的下标, 用最大的值构造根节点node = TreeNode(0)maxval = 0maxvalidx = 0for i in range(len(nums)):if nums[i]>maxval:maxval = nums[i]maxvalidx = inode.val = maxval# 2.最大值左边的元素构建左子树if maxvalidx > 0:left_list = nums[:maxvalidx]node.left = self.constructMaximumBinaryTree(left_list)# 3.最大值右边的元素构建右子树if maxvalidx < len(nums)-1:right_list = nums[maxvalidx+1:]node.right = self.constructMaximumBinaryTree(right_list)return node

617.合并二叉树

力扣链接
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

思路 递归-前序遍历

class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if root1 == None:return root2if root2 == None:return root1# 定义一个新树的根节点root = TreeNode(0)root.val = root1.val + root2.valroot.left = self.mergeTrees(root1.left, root2.left)root.right = self.mergeTrees(root1.right, root2.right)return root

700.二叉搜索树中的搜索

力扣链接
给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。
BST的特性为左边的比中间大,右边的比中间小,且BST的子树依旧是BST。

思路1 递归

class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if root == None or root.val == val:return root# val小,要找的值在左边if root.val > val:return self.searchBST(root.left,val)# val大,要找的值在右边        if root.val < val:return self.searchBST(root.right,val)

思路2 迭代

class Solution:def searchBST(self, root: TreeNode, val: int) -> TreeNode:while root:if val < root.val: root = root.leftelif val > root.val: root = root.rightelse: return rootreturn None

98.验证二叉搜索树

力扣链接
给定一个二叉树,判断其是否是一个有效的二叉搜索树。

思路 中序遍历后判断是否有序

class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:res = []def dfs(node):if node is None:returndfs(node.left)res.append(node.val)dfs(node.right)dfs(root)for i in range(1,len(res)):if res[i]<=res[i-1]:return Falsereturn True

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

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

相关文章

React 为什么使用map来渲染列表 而不是其他循环方法

1. 声明式与函数式编程 React强调声明式编程&#xff0c;这意味着你只需要关心代码“做什么”&#xff0c;而不是“怎么做”。.map()函数是一种高阶函数&#xff0c;它属于函数式编程范畴&#xff0c;能够返回一个新数组&#xff0c;这非常适合用于生成组件列表。 使用.map()…

自适应容积卡尔曼滤波|(自适应CKF)的MATLAB源代码

介绍 容积卡尔曼滤波在理论上拥有比UKF更高的精度和稳定性&#xff0c;本自适应算法通过对观测残差的计算&#xff0c;在观测协方差R不准确或无法获得时&#xff0c;对R进行调节&#xff0c;以起到降低估计误差的作用。 模型 使用的是三维的非线性模型&#xff0c;经过适当修…

2024年蓝桥杯B组C++——复盘

1、握手问题 知识点&#xff1a;模拟 这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手&#xff0c;仅需要两两握手&#xff0c;也就是从42个握手开始&#xff0c;而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。 总结&#xff1a…

数据集004:跌倒检测数据集 (含数据集下载链接)

数据集简介&#xff1a; 该数据集为跌倒检测数据集&#xff0c;属于imageclassify任务&#xff0c;分为fall和nofall两大类&#xff0c;累计共1000张图片&#xff0c;均为人工标注 xml格式&#xff0c;可用于yolo训练。 数据集链接&#xff1a;跌倒检测数据集&#xff08;1000…

【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理

目录 一、软件测试的⽣命周期 二、BUG 2.1 bug的概念 2.2 描述bug的要素 2.3 bug级别 2.4 bug的⽣命周期 &#x1f4a1;2.5 与开发产⽣争执怎么办&#xff08;⾼频考题&#xff09; &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

快速生成sql

增加快速开发速度

Python筑基之旅专栏(导航)

目录 一、Python筑基之旅专栏博文清单及链接 二、推荐阅读 一、Python筑基之旅专栏博文清单及链接 01、溯源及发展 02、变量和数据类型 03、搭建Python开发环境及库 04、两个重要函数/列表/元组 05、字符串(一) 06、字符串(二) 07、字符串(三) 08、字典 09、集合 10…

Taro React组件开发 —— RuiVerifySlider 行为验证码之滑动拼图

1. 效果预览 2. 使用场景 账号登录,比如验证码发送,防止无限调用发送接口,所以在发送之前,需要行为验证! 3. 插件选择 AJ-Captcha行为验证码文档AJ-Captcha行为验证码代码仓库为什么要选用【AJ-Captcha行为验证码】呢?因为我们管理后台使用的是 pigx ,它在后端采用的是【…

HX-100调频广播覆盖专用天线

HX-100全向天线是北京恒星科通科技发展有限公司自主研发的一款隧道专用宽带调频发射天线&#xff0c;采用圆盘形结构、振子采用铝合金材料制造&#xff0c;具有增益高、功率容量大、工作频带宽、安装方便、防腐防潮、抗风性能好等特点&#xff0c;特别适合隧道调频广播覆盖、地…

嵌入式学习——进线程(互斥锁和同步)——day26

1. 两个线程进行售票处理&#xff0c;售票一百张 #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h>pthread_mutex_t mutex; int tick 100;void * th(void* arg) {while(1){pthread_mutex_lock(&mutex);if(tick&…

【制作100个unity游戏之26】unity2d横版卷轴动作类游13(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言存储点灯光后处理存储位置信息存储更多数据存储场景信息持久化存储数据引入Unity 的可序列化字典类调用 游戏结束源码完结 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各…

拆分字段——kettle开发11

一、拆分字段 1、拆分字段就是将一个字段拆分为多个字段&#xff0c;原字段就不存在数据流之中&#xff0c;拆分的规则是按照一个的分隔符进行拆分。具体语法如下图所示。 2、实操将EXCEL中name拆分为firstname 和 lastname,具体转换包括EXCEL输入、拆分字段、EXCEL输出。 EXC…

《软件方法(下)》8.3.4.5和《设计模式》中用语的区别

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 8.3.4 识别关联关系 8.3.4.4 类关系再整理 有了前面的知识&#xff0c;我们需要再整理一下类的关系。用类图表示类的关系如图8-134。 图8-134 “类的…

音响上的蓝牙与AUX与mic输入原来可以利用来多台电脑用一个播放器mic可以直接接3.5音频输入

一台电脑连接了音响的蓝牙或者AUX&#xff0c;一台连接了音响的mic输入&#xff0c;mic可以直接接3.5音频输入, 音响就同时播放着两个电脑的声音&#xff0c;真是太好玩了。才发现节省一台音响的钱&#xff0c;哈哈哈哈。

如何进行硬件监控

在复杂的技术环境中&#xff0c;人们很容易忘记硬件资源的重要性&#xff0c;IT 行业的爆炸性增长使得监控各种硬件资源变得越来越重要&#xff0c;在处理运行关键业务应用程序并在日常基础上启用全局操作的大型网络时&#xff0c;保护这些网络环境的基本构建块至关重要。硬件监…

css渐变背景色和渐变边框的设置

渐变背景色 要创建渐变背景色&#xff0c;可以使用background-image属性并结合使用渐变函数。有两种常见的渐变函数&#xff1a;linear-gradient()和radial-gradient()。 使用linear-gradient()创建水平或垂直线性渐变背景色&#xff1a; .gradient-bg {background-image: li…

授人以渔 选购篇十三:前置过滤器选购要点

文章目录 系列文章水流量&#xff1a;4T以上过滤精度&#xff1a;40微米冲洗方式&#xff1a;反冲洗多重冲洗手段材质&#xff1a;316不锈钢滤网无铅铜品牌其他 系列文章 授人以渔 选购篇一&#xff1a;信用卡选购要点 授人以渔 选购篇二&#xff1a;冰箱选购要点 授人以渔 选…

苗情灾情监控系统—提高农业生产效率

TH-MQ2苗情灾情监控系统是一种用于监测农作物生长状况和灾情的设备&#xff0c;通过实时监测和数据分析&#xff0c;帮助农民及时了解作物生长情况&#xff0c;采取相应的管理措施&#xff0c;提高农业生产效率和降低生产成本。 该系统通常由多种传感器、摄像头、数据传输模块等…

IDEA软件和插件安装

安装IDEA版本&#xff1a;IDEA windows 2021.1.3 使用该版本的IDEA&#xff0c;并且安装下面插件后&#xff0c;个人认为非常好用&#xff0c;并且可以不用破解&#xff0c;无限使用企业版&#xff0c;了解具体方法可以留言或私信。 记录几个好用的IDEA插件&#xff0c;后续持…

高通车规芯片分析

高通三款芯片 SA8155P 7nm SA8295P 5nm SA8255P 5nm 分析AECQ等级 AECQ100里面定义了5个工作环境温度等级&#xff1a;Grade0&#xff1a;-40-150 Grade1&#xff1a;-40-125 Grade2&#xff1a;-40-105 Grade3&#xff1a;-40-85 Grade4&#xff1a;0-70AEC-Q100整体认证测试…