2023-12-18 最大二叉树、合并二叉树、二叉搜索树中的搜索、验证二叉搜索树

654. 最大二叉树

654.最大二叉树

核心:记住递归三部曲,一般传入的参数的都是题目给好的了!把构造树类似于前序遍历一样就可!就是注意单层递归的逻辑!
# 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 constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:# 递归三部曲if not nums:return max_ = max(nums)max_index = nums.index(max_)root = TreeNode(max_)root.left = self.constructMaximumBinaryTree(nums[:max_index])root.right = self.constructMaximumBinaryTree(nums[max_index + 1:])return rootdef constructMaximumBinaryTree2(self, nums: List[int]) -> Optional[TreeNode]:# 递归的三部曲 1.确定参数以及返回值--传入数组,输出节点 2.结束递归条件--如果数组len==1说明遍历到叶子节点了 3.单层逻辑--找到最大值以及最大值的下标if len(nums) == 1:return TreeNode(nums[0]) node = TreeNode(0)max_numb = 0max_index = 0  for i in range(len(nums)):if nums[i] > max_numb:max_index = imax_numb = nums[i]node.val = max_numb# 判断下标值是否大于0 说明是否有左子树if max_index > 0:new_list = nums[:max_index]node.left = self.constructMaximumBinaryTree(new_list)if max_index < len(nums) - 1:new_list = nums[max_index + 1:]node.right = self.constructMaximumBinaryTree(new_list)return node

617. 合并二叉树

617.合并二叉树

思路:以建立的节点为标准,类似于前缀【中后序】遍历进行构造!或者使用迭代法【建立两个队列进行维护就好了】
# 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 mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:# 终止条件:但凡有一个节点为空,就返回另一个节点,如果另一个也为None就直接返回None# 以创建的新节点为移动标准if not root1:return root2if not root2:return root1node  = TreeNode()node.val = root1.val + root2.valnode.left = self.mergeTrees(root1.left, root2.left)node.right = self.mergeTrees(root1.right, root2.right)return nodedef mergeTrees1(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1 and not root2:return node = TreeNode(0)if root1 and root2:node.val = root1.val + root2.valnode.left = self.mergeTrees(root1.left,root2.left)node.right = self.mergeTrees(root1.right, root2.right)elif root1 and not root2:node.val = root1.valnode.left = self.mergeTrees(root1.left,None)node.right = self.mergeTrees(root1.right,None)else:node.val = root2.valnode.left = self.mergeTrees(None,root2.left)node.right = self.mergeTrees(None,root2.right)return node

700. 二叉搜索树中的搜索

思想:使用层次遍历或者使用递归或迭代

二叉搜索树

# 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 searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:queue_1 = []if not root:# return queue_1.append(root) 犯下了致命弱智的错误return Nonequeue_1.append(root)while len(queue_1) > 0:node = queue_1.pop(0)if node.val == val:return nodeif node.left:queue_1.append(node.left)if node.right:queue_1.append(node.right)return None# 迭代法def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:while root:if root.val > val:root = root.leftelif root.val < val:root = root.rightelse:return rootreturn None# 递归法def searchBST(self, root: TreeNode, val: int) -> TreeNode:# 为什么要有返回值: #   因为搜索到目标节点就要立即return,#   这样才是找到节点就返回(搜索某一条边),如果不加return,就是遍历整棵树了。if not root or root.val == val: return rootif root.val > val: return self.searchBST(root.left, val)if root.val < val: return self.searchBST(root.right, val)

98. 验证二叉搜索树

核心:理解中序遍历的规则,在二叉树中中序遍历出来的结果一定是有序的!

在这里插入图片描述

# 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 __init__(self):self.nums = []def isValidBST(self, root: Optional[TreeNode]) -> bool:# 中序遍历出来的数一定是有序的self.nums = []  # 清空数组self.traversal(root)for i in range(1, len(self.nums)):# 注意要小于等于,搜索树里不能有相同元素if self.nums[i] <= self.nums[i - 1]:return Falsereturn Truedef traversal(self, root):if root is None:returnself.traversal(root.left)self.nums.append(root.val)  # 将二叉搜索树转换为有序数组self.traversal(root.right)# 设置最小值比较,就可以修改了单层逻辑那个地方,左了一个比较!
class Solution:def __init__(self):self.maxVal = float('-inf')  # 因为后台测试数据中有int最小值def isValidBST(self, root):if root is None:return Trueleft = self.isValidBST(root.left)# 中序遍历,验证遍历的元素是不是从小到大if self.maxVal < root.val:self.maxVal = root.valelse:return Falseright = self.isValidBST(root.right)return left and right

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

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

相关文章

强化产品联动:网关V7独家解决方案的三重优势

客户背景 某央企单位汇聚了众多业内优秀的工程师和科研人员&#xff0c;拥有先进的研发设施和丰富的研发经验&#xff0c;专注于为全球汽车行业提供创新和实用的解决方案。其研发成果不仅在国内市场上得到了广泛应用&#xff0c;也在国际市场上赢得了广泛的认可和赞誉。 客户需…

jconsole与jvisualvm

jconsole 环境变量配置好后 直接输入在cmd 输入jconsole 即可 jvisualvm cmd 输入jvisualvm jvisualvm 能干什么 监控内存泄露&#xff0c;跟踪垃圾回收&#xff0c;执行时内存、cpu 分析&#xff0c;线程分析… 运行&#xff1a;正在运行的 休眠&#xff1a;sleep 等待…

接口测试的工具(3)----postman+node.js+newman

1.安装newman&#xff1a;输入命令之后 一定注意 什么都不要操作 静静的等待结束就行了。 2.安装失败的对此尝试不行 在用下面的方法 解压一下就行了 3.验证是否成功 多次尝试是可以在线安装成功的

Unity中Shader URP最简Shader框架(ShaderGraph 转 URP Shader)

文章目录 前言一、 我们先了解一下 Shader Graph 怎么操作1、了解一下 Shader Graph 的面板信息2、修改Shader路径3、鼠标中键 或 Alt 鼠标左键 移动画布4、鼠标右键 打开创建节点菜单5、把ShaderGraph节点转化为 Shader 代码6、可以看出 URP 和 BuildIn RP 大体框架一致 二、…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍&#xff0c;作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

C# WPF上位机开发(usb设备访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前很多嵌入式设备都支持usb访问&#xff0c;特别是很多mcu都支持高速usb访问。和232、485下个比较&#xff0c;usb的访问速度和它们基本不在一个…

unittest自动化测试框架讲解以及实战

为什么要学习unittest 按照测试阶段来划分&#xff0c;可以将测试分为单元测试、集成测试、系统测试和验收测试。单元测试是指对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;通常指函数或者类&#xff0c;一般是开发完成的。 单元…

工业数据的特殊性和安全防护体系探索思考

随着工业互联网的发展&#xff0c;工业企业在生产运营管理过程中会产生各式各样数据&#xff0c;主要有研发设计数据、用户数据、生产运营数据、物流供应链数据等等&#xff0c;这样就形成了工业大数据&#xff0c;这些数据需要依赖企业的网络环境和应用系统进行内外部流通才能…

【Python】—— NumPy基础及取值操作

NumPy基础及取值操作 第1关&#xff1a;ndarray对象第2关&#xff1a;形状操作第3关&#xff1a;基础操作第4关&#xff1a;随机数生成第5关&#xff1a;索引与切片 第1关&#xff1a;ndarray对象 任务描述 本关任务&#xff1a;根据本关所学知识&#xff0c;补全代码编辑器中…

react基于antd二次封装spin组件

目录 react基于antd二次封装spin组件组件使用组件效果 react基于antd二次封装spin组件 组件 import { Spin } from antd; import propTypes from "prop-types"; import React from react; import styleId from "styled-components"; // 使用 父div必须加…

【爬虫课堂】如何高效使用短效代理IP进行网络爬虫

目录 一、前言 二、代理IP的基本知识 三、短效代理IP的优势 四、高效使用短效代理IP的技巧 1. 多源获取代理IP 2. 质量筛选代理IP 3. 使用代理池 4. 定时更换代理IP 5. 失败重试机制 6. 监控和自动化 五、示例代码 六、结语 一、前言 网络爬虫是一种自动化程序&am…

MongoDB中的关系

本文主要介绍MongoDB中的关系。 目录 MongoDB的关系嵌入关系引用关系 MongoDB的关系 MongoDB是一个非关系型数据库&#xff0c;它使用了键值对的方式来存储数据。因此&#xff0c;MongoDB没有像传统关系型数据库中那样的表、行和列的概念。相反&#xff0c;MongoDB中的关系是通…

LLM之RAG实战(五)| 高级RAG 01:使用小块检索,小块所属的大块喂给LLM,可以提高RAG性能

RAG&#xff08;Retrieval Augmented Generation&#xff0c;检索增强生成&#xff09;系统从给定的知识库中检索相关信息&#xff0c;从而使其能够生成事实信息、上下文相关信息和特定领域的信息。然而&#xff0c;在有效检索相关信息和生成高质量响应方面&#xff0c;RAG面临…

【网络安全】-Linux操作系统—CentOS安装、配置

文章目录 准备工作下载CentOS创建启动盘确保硬件兼容 安装CentOS启动安装程序分区硬盘网络和主机名设置开始安装完成安装 初次登录和配置更新系统安装额外的软件仓库安装网络工具配置防火墙设置SELinux安装文本编辑器配置SSH服务 总结 CentOS是一个基于Red Hat Enterprise Linu…

美颜SDK是什么?视频美颜SDK在直播平台中的集成与接入教程详解

当下&#xff0c;主播们追求更加自然、精致的外观&#xff0c;而观众也期待在屏幕前欣赏到更为清晰、美丽的画面。为了满足这一需求&#xff0c;美颜SDK应运而生&#xff0c;成为直播平台的重要利器之一。 一、什么是美颜SDK&#xff1f; 通过美颜SDK&#xff0c;开发者可以…

Kotlin Multiplatform的现状—2023年网络研讨会

Kotlin Multiplatform的现状—2023年网络研讨会 在2023年&#xff0c;Kotlin Multiplatform因其开发、当前状态和未来潜力而受到了相当大的关注。随着越来越多的开发者对采用KMP进行跨平台解决方案表示兴趣&#xff0c;JetBrains在11月下旬推出了一系列网络研讨会作为回应。首…

“去 Android化”为何蔚然成风?

早在2008年时&#xff0c;国内市场诞生了第一批自研手机OS&#xff0c;由于种种缘由铩羽而归&#xff0c;“优化Android ”貌似成为了本土特色。而从2023年下半年开始掀起了一股"去安卓化"的热潮&#xff0c;像华为、小米、vivo等都不约而同的站在了同一战线。 “去…

bisect_left,bisect_right,bisect的用法,区别以源码分析

bisect_left(*args, **kwargs) 向一个数组插入一个数字&#xff0c;返回应该插入的位置。 如果这个数字不存在于这个数组中&#xff0c;则返回第一个比这个数大的数的索引 如果这个数字存在&#xff0c;则返回数组中这个数的位置的最小值&#xff08;即最左边那个索引&#xf…

使用Kaptcha实现的验证码功能

目录 一.需求 二.验证码功能实现步骤 验证码 引入kaptcha依赖 完成application.yml配置文件 浏览器显示验证码 前端页面 登录页面 验证成功页面 后端 此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。 一.需求 1.页面生成验证码 2.输入验证码&#xff…

Kafka-Kafka基本原理与集群快速搭建(实践)

Kafka单机搭建 下载Kafka Apache Download Mirrors 解压 tar -zxvf kafka_2.12-3.4.0.tgz -C /usr/local/src/software/kafkakafka内部bin目录下有个内置的zookeeper(用于单机) 启动zookeeper&#xff08;在后台启动&#xff09; nohup bin/zookeeper-server-start.sh conf…