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.hqwc.cn/news/285200.html

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

相关文章

论文阅读——Painter

Images Speak in Images: A Generalist Painter for In-Context Visual Learning GitHub - baaivision/Painter: Painter & SegGPT Series: Vision Foundation Models from BAAI 可以做什么&#xff1a; 输入和输出都是图片&#xff0c;并且不同人物输出的图片格式相同&a…

C# 图解教程 第5版 —— 第19章 枚举器和迭代器

文章目录 19.1 枚举器和可枚举类型19.2 IEnumerator 接口19.3 IEnumerable 接口19.4 泛型枚举接口19.5 迭代器19.5.1 迭代器块19.5.2 使用迭代器来创建枚举器19.5.3 使用迭代器来创建可枚举类型 19.6 常见迭代器模式19.7 产生多个可枚举类型19.8 将迭代器作为属性19.9 迭代器的…

阿里云|人工智能(AI)技术解决方案

函数计算部署Stable Diffusion AI绘画技术解决方案 通过函数计算快速部署Stable Diffusion模型为用户提供快速通过文字生成图片的能力。该方案通过函数计算快速搭建了AIGC的能力&#xff0c;无需管理服务器等基础设施&#xff0c;专注模型的能力即可。该方案具有高效免运维、弹…

Excel小技能:excel如何将数字20231211转化成指定日期格式2023/12/11

给了一串数字20231211&#xff0c;想要转成指定格式的日期格式&#xff0c;发现设置单元格格式为指定日期格式不生效&#xff0c;反而变成很长很长的一串#这个&#xff0c;如图所示&#xff1a; 其实&#xff0c;正确的做法如下&#xff1a; 1&#xff09;打开数据功能界面&am…

[ CTF ]【天格】战队WriteUp-第七届“强网杯”全国安全挑战赛

第七届“强网杯”全国安全挑战赛 2023.12.16~2023.12.17 文章目录 【Misc】Pyjail ! Its myFILTER !!!easyfuzz谍影重重2.0签到Pyjail ! Its myRevenge !!!server_8F6C72124774022B.py 问卷调查 【Reverse】ezre 【Web】happygame 【强网先锋】石头剪刀布TrieSpeedUpezreez_fmt…

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 &#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 &#xff08;多指标&#…

支持向量机(SVM):高效分类的强大工具

文章目录 前言1. SVM的基本原理1.1 核心思想1.2 支持向量1.3 最大化建模1.4 松弛变量1.5 核函数 2. SVM与逻辑回归的区别和联系2.1 区别2.2 联系 3. SVM的应用领域3.1 图像分类3.2 文本分类3.3 生物信息学3.4 金融领域3.5 医学诊断 4. SVM的优势与挑战4.1 优势4.1.1 非线性分类…

K8s内容器拓扑图工具

1.背景&#xff1a;随着线上容器越来越多&#xff0c;需要一个可视化的方式展示各个容器之间的拓扑图。 2.需求&#xff1a;轻量级&#xff0c;部署方便。 3.部署 helm repo add groundcover https://helm.groundcover.com/ helm repo update helm install caretta --namespa…

使用ffmpeg将图片合成为mp4

首先在在图片文件夹输入cmd 这里确保已经安装ffmpeg并配置好环境变量。 然后这是我的文件夹目录&#xff1a; 将21张图片合成为mp4视频 这里使用如下命令&#xff1a; ffmpeg -framerate 1 -start_number 0 -i %d.png -c:v libx264 -pix_fmt yuv420p output.mp4 -framerat…

SpringBoot Whitelabel Error Page 报错--【已解决】

springboot 报错信息如下 这个报错页面就是个404 &#xff0c;代表你访问的url 没有对应的的requestmapping 其实没啥影响的一个问题&#xff0c;但是看到Error 就是不爽&#xff0c;改了他丫的 解决方法如下 一、调整application.properties配置【治标不治本】 server.err…

docker在线安装minio

1、下载最新minio docker pull minio/minio 2、在宿主机创建 /usr/local/data/miniodocker/config 和 /usr/local/data/miniodocker/data,执行docker命令 docker run -p 9000:9000 -p 9090:9090 --name minio -d --restartalways -e MINIO_ACCESS_KEYminio -e MINIO_SECRET_K…