代码随想录day20

654. 最大二叉树

 

思路:这道题的目的是从给定的nums数组中找到一个最大值当做二叉树的根节点,然后以最大值左右两边的元素分别构建二叉树。也就是一个左中右的顺序,所以构建二叉树这种题用前序遍历是再合适不过了,因为根节点把左右子树分开了,很好分辨。

这里我们用for循环去记录当前最大值的index,如果index>0的话,那么就从nums[0:index]构建左子树,如果index<len(nums)-1,那么就从[index+1:]的位置到最后去构建右子树。然后分别递归

代码:

        

max_num = float('-inf')index =0for i in range(len(nums)):if nums[i] > max_num:max_num = nums[i]index = i #找到最大值 构建根节点root = TreeNode(max_num)if index>0:left = nums[0:index]root.left = self.constructMaximumBinaryTree(left)if index<len(nums)-1:right = nums[index+1:]root.right = self.constructMaximumBinaryTree(right)return root

 这里为什么要去判断index是不是大于0,经过刚才我的实验,我认为是如果我们的最大值在第一个元素也就是index= 0的时候,我们的左子树目前是不能构成的,那么就直接先构建右子树。

617. 合并二叉树

思路:本题和之前的反转二叉树有点类似,同时操作两个二叉树

判断条件:

        当root1==none的时候,应该直接返回root2, 

        当root2==none的时候 应该直接返回root1 

然后才是当两个都不为空的时候,root1.val+=root2.val构造新节点的值

这里重复用了tree1去构造新的二叉树,所以最后直接返回tree1就好了,然后就是合并之后继续递归当前的节点的左子树和tree2当前节点的左子树(注意 他们是同步进行操作的,并不是异步)可能有朋友问 你怎么知道tree1遍历到当前节点的时候,tree2刚好也在这个位置呢?这是因为他们两个是同时进行操作的 并不是先后遍历。

同理,当前节点的右子树也是递归。

代码:        

def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if root1==None:return root2 if root2==None:return root1 root1.val+=root2.val root1.left = self.mergeTrees(root1.left,root2.left)root1.right = self.mergeTrees(root1.right,root2.right)return root1

 700. 二叉搜索树中的搜索

 

 

二叉搜索树特性:中序遍历为有序数组 

如果当前root的值小于寻找的值,那么肯定不在我们的左子树,一定是去右子树找

同理,如果当前值大于寻找值,也一定去左子树找。

这里递归的终止条件:直到我们找到当前root的值等于寻找值,那么就直接返回root

递归参数:root

单层循环逻辑:if root.val > val:

                                return self.traversal(root.left)

                        if root.val <val:

                                return self.traversal(root.right)

代码:

                

def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:#这里注意一个特性 二叉搜索树 中序遍历为有序数组 if not root:return Noneif root.val==val:return rootif root.val<val:return self.searchBST(root.right,val)if root.val>val:return self.searchBST(root.left,val)

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

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

相关文章

ETHERCAT转ETHERCAT网关西门子为什么不支持ethercat两个ETHERCAT设备互联

1.1 产品功能 远创智控YC-ECT-ECT是自主研发的一款ETHERCAT从站功能的通讯网关。该产品主要功能是将2个ETHERCAT网络连接起来。 本网关连接到ETHERCAT总线中做为从站使用。 1.2 技术参数 1.2.1 远创智控YC-ECT-ECT技术参数 ● 网关做为ETHERCAT网络的从站&#xff0c;可以连接…

将已删除的 Safari 历史记录恢复到 iPhone 的 6 种最佳方法

Safari 是 iPhone 上的默认浏览器。其直观且易于使用的界面是许多 iPhone 用户更喜欢 Safari 而非其他浏览器的原因之一。但是&#xff0c;如果您无意或故意删除了浏览历史记录&#xff0c;但发现稍后仍需要恢复已删除的 Safari 历史记录&#xff0c;这可能会给您带来一些麻烦。…

131、仿真-基于51单片机智能电子称HX711报警仿真设计(程序+原理图+PCB图+Proteus仿真+参考论文+元器件清单等)

摘 要 电子秤是将检测与转换技术、计算机技术、信息处理、数字技术等技术综合一体的现代新型称重仪器。它与我们日常生活紧密结合息息相关。 电子称主要以单片机作为中心控制单元&#xff0c;通过称重传感器进行模数转换单元&#xff0c;在配以键盘、显示电路及强大软件来组成…

RocketMQ第四节(部署模式、监控面板等)

1&#xff1a;mq的部署模式 部署方式 | RocketMQ 参考官网。 单机模式&#xff1a;抗风险能力差&#xff0c;单机挂机没服务&#xff0c;单机硬盘损坏&#xff0c;丢失数据 多机&#xff08;多master没有Slave副本&#xff09;: 多个master采用RAID10磁盘&#xff0c;不会丢…

Spring Cloud Alibaba【创建支付服务生产者、创建服务消费者 、Dubbo和OpenFeign区别 、微服务接入OpenFeign】(二)

目录 分布式服务治理_创建支付服务生产者 分布式服务治理_创建服务消费者 服务调用_Dubbo和OpenFeign区别 服务调用_微服务接入OpenFeign 分布式服务治理_创建支付服务生产者 创建服务提供者工程cloud-provider-payment8001 POM文件引入依赖 <dependencies><…

密码学学习笔记(十三):哈希函数 - Merkle–Damgård结构

Merkle–Damgrd是一种算法&#xff0c;由Ralph Merkle和Ivan Damgrd提出。它通过迭代调用压缩函数来计算消息的哈希值。 应用 拿SHA-2举例&#xff0c;首先我们需要对需要进行哈希运算的输入做填充&#xff0c;然后将填充后的输入划分为等长的分组&#xff0c;每个分组的长度…

设计模式07-责任链模式

责任链模式属于行为设计模式&#xff0c;常见的过滤器链就是使用责任链模式设计的。 文章目录 1、真实开发场景的问题引入2、责任链模式讲解2.1 核心类及类图2.2 基本代码 3、利用构建者模式解决问题4、责任链模式的应用实例5、总结5.1 解决的问题5.2 使用场景5.3 优缺点 1、真…

Docker基础(二)

1、Docker工作原理 Docker是一个Clinet-Server结构的系统&#xff0c;Docker守护进程运行在主机上&#xff0c;然后通过Socket连接从客户端访问&#xff0c;守护进程从客户端接受命令并管理运行在主机上的容器。 容器&#xff0c;是一个运行时环境&#xff0c;就是我们前面说的…

编程小白的自学笔记十(python爬虫入门二+实例代码详解)

系列文章目录 编程小白的自学笔记九&#xff08;python爬虫入门代码详解&#xff09; 编程小白的自学笔记八&#xff08;python中的多线程&#xff09; 编程小白的自学笔记七&#xff08;python中类的继承&#xff09; 编程小白的自学笔记六&#xff08;python中类的静态方法…

Servlet的监听器

Servlet常用的监听器 ServletContextAttributeListener 用来感知ServlerContext对象属性变化&#xff0c;比如添加或删除属性变化 ServletContextListener 用来感知ServlerContext对象的创建和销毁的 ServletRequestListener 可以用来监听感知ServletRequest对象的创建和销毁的…

QT:问题、解决与原因

在这里记录一些自己遇到的在QT开发上面的小问题和tips 目录 QComboBox 设置qss样式不生效qt按钮设置点击释放效果实现效果 QComboBox 设置qss样式不生效 我设置的样式是&#xff1a; box->setStyleSheet("QComboBox {""border: none;""padding:…

spring boot 多模块项目搭建Knife4j文档,swagger-ui x2

介绍: knife4j jeecg-boot用的就是这个&#xff0c;我之前要搭过swagger-ui&#xff0c;但外观&#xff0c;体验都没有knife4j好&#xff0c;我没记错的话已经停止发布版本了&#xff0c;所以我的多模块项目就用到了这个&#xff0c;还搭建了jwt token获取我也是在网上找的…