当前位置: 首页 > news >正文

【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】

关注二叉树的三个问题:

  1. 什么情况适合自顶向下?什么时候适合用自底向上
  2. 一般来说,DFS的递归边界是空节点,什么情况下要额外把叶子节点作为递归边界?
  3. 在什么情况下,DFS需要有返回值?什么情况不需要有返回值?

三种遍历顺序

本质就是根节点位置决定前中后序遍历

  1. 前序遍历
    • 顺序根节点 - 左子树 - 右子树。
    • 特点:先处理根节点,然后依次深入左子树和右子树进行相同规则的遍历。可以快速获取根节点相关信息,适用于复制二叉树等操作。
  2. 中序遍历
    • 顺序:左子树 - 根节点 - 右子树。
    • 特点:对于二叉搜索树,能得到有序的节点序列。先深入左子树,再访问当前层根节点,最后遍历右子树,常用于二叉搜索树的排序相关操作。
  3. 后序遍历
    • 顺序:左子树 - 右子树 - 根节点
    • 特点:最后处理根节点,在删除二叉树节点或者需要先获取左右子树信息(如计算二叉树高度)的场景比较适用,先递归处理左右子树,最后处理根节点。

144.二叉树的前序遍历

# 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 preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []def dfs(node):if node is None: returnres.append(node.val)    # 根节点值 dfs(node.left)		    # 左节点dfs(node.right)			# 右节点dfs(root)return res

94.二叉树的中序遍历

# 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []def dfs(node):if node is None: returndfs(node.left)res.append(node.val)dfs(node.right)dfs(root)return res

145.二叉树的后序遍历

# 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 postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []def dfs(node):if not node: return dfs(node.left)dfs(node.right)res.append(node.val)dfs(root)return res

872.叶子相似的树

# 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 leafSimilar(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:# dfs 递归到叶子节点时(当前节点无左右子节点),将当前节点值放入res=[]# 用啥顺序遍历?def dfs(node):ans = []# 当前空节点,直接returnif not node:return# 递归到了叶子节点if node.left is node.right:ans.append(node.val)# 前序遍历?dfs(node.left)dfs(node.right)return ansreturn dfs(root1) == dfs(root2)
——————————————————————
解答错误
21 / 47 个通过的测试用例官方题解
输入
root1 =
[1,2,3]
root2 =
[1,3,2]添加到测试用例
输出
true
预期结果
false

以为是递归顺序的原因,换成了中序遍历,结果并没有改变。

这段代码的核心错误在于每次每次调用dfs函数,都重新初始化了一个空列表[ ],这样就无法正确地在整棵树地遍历过程中收集到所有叶子节点的值到一个统一的列表!

正确做法是,在函数外部初始化结果列表ans1和ans2,然后将这个列表不断递归更新,每次都传入下一层递归函数!
class Solution:def leafSimilar(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:# dfs 递归到叶子节点时(当前节点无左右子节点),将当前节点值放入res=[]# 用啥顺序遍历?ans1 =[]ans2 = []def dfs(node, ans):# 当前空节点,直接returnif not node:return           # 递归到了叶子节点if node.left is None and node.right is None:ans.append(node.val)                                       # 前序遍历?dfs(node.left, ans)dfs(node.right, ans)return ansans1 = dfs(root1, ans1)ans2 = dfs(root2, ans2)return ans1 == ans2

LCP44.开幕式焰火

DFS + 前序遍历 + set()

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def numColor(self, root: TreeNode) -> int:# DFS + 前序遍历 + set()s = set()def dfs(node, s):if node is None:returns.add(node.val)dfs(node.left, s)dfs(node.right, s)dfs(root, s)return len(s)

或者把s非重复字典,放到dfs函数外面,也可以实现这个逻辑。为什么?

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:def numColor(self, root: TreeNode) -> int:# DFS + 前序遍历 + set()s = set()def dfs(node):if node is None:returns.add(node.val)dfs(node.left)dfs(node.right)dfs(root)return len(s)

两种方式区别在于 set 的定义位置与传递形式不同,效果一样是因为都利用 set 去重特性,遍历二叉树时添加节点值并最终返回其元素个数来统计不同节点值数量。

BFS + 层遍历 + 队列

层次遍历顺序:按照树的层次一层一层地向下遍历,直到队列为空。
这里地遍历顺序是广度优先地按层遍历,从根节点开始,每层从左到右一次访问节点。

# Definition for a binary tree node.
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right
class Solution:def numColor(self, root):s = set()self.search(s, root)return len(s)def search(self, s, node):if node is None:returnq = []q.append(node)while q:current_node = q.pop(0)s.add(current_node.val)if current_node.left:q.append(current_node.left)if current_node.right:q.append(current_node.right)

404.左叶子之和

  • 返回所有左叶子值之和
  • 为了理解如何找到左叶子,先不完成这道题的要求,先写一个dfs来判断如何找到左叶子。

DFS写法

def (node, is_left):if node is None:return# 判断是否为左叶子节点if node.left is None and node.right is None and is_left:res.append(node.val)dfs(node.left, True)dfs(node.right, False)dfs(root, False)

BFS写法

class TreeNode:def __inti__(self, val=0, left=None, right=None):self.val = valself.right = rightself.left = leftclass Solution:def sumOfLeftLeaves(self, root):res = []if root is None:return resultq = []q.append((root, False))while q:current_node, is_left = q.pop(0)# 判断是否是左叶子节点if current_node.left is None and current_node.right is None and s_left:result.append(current_node.val)if current_node.left:q.append((current_node.left, True))if current_node.right:q.append((current_node.right, False))return result 			

以上是如何遍历左叶子的方法
下面完成本题任务,加和所有左叶子值

# 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 sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:res = 0def dfs(node, is_left):nonlocal resif node is None:return# 关键逻辑,is_left递归决定是否dfsif node.left is None and node.right is None and is_left:res += node.valdfs(node.left, True)dfs(node.right, False)dfs(root, False)return res
一开始没加nonlocal一直通过不了!!
如果dfs函数内部没有用nonlocal声明res,python会认为在dfs内部重新定义了一个局部变量res,(尽管我实际上是想操作外层函数中的那个res),并且因为我在用res之前没有对这个新认为的局部变量进行初始化,所以会抛出unboundlocalerrro的错误,提示无法访问一个没有关联值的局部变量
当我加了nonlocal res后,就明确告诉了python解释器,在dfs函数中操作的res是来自外层函数的那个以及已经初始化过的局部变量,这样就能正确找到。

671.二叉树中第二小的节点

  • 这道题很难么?我认为只要检查根节点的左右子节点就行,如果根节点的左右子节点都相等,才需要递归检查左右子树,
  • 直到发现第一次不相等,不等于根节点那个值就是第二大的值,我这个思路对不对?

不对!!!

  1. 类比欧冠比赛来理解二叉树问题
    • 冠军(根节点最小值)的确定方式
      • 在欧冠比赛中,冠军是通过层层比赛筛选出来的最强队伍。在二叉树中,根节点的值被定义为左右子节点中的最小值(root.val = min(root.left.val, root.right.val)),这就好像冠军是从左右两个“分区”(左右子树)中选出的最小值一样。
    • 第二强队伍(第二小值)的复杂性
      • 在欧冠比赛中,亚军不一定是第二强的队伍。因为比赛的赛制是淘汰赛,可能有其他很强的队伍在和冠军队伍比赛前就被淘汰了,这些队伍也许比亚军更强。类比到二叉树中,只看根节点的左右子节点来确定第二小的值是不准确的。就像比赛中有很多队伍在淘汰赛过程中被淘汰一样,二叉树中的节点值也存在多种情况。
      • 例如,在二叉树中,即使根节点的左右子节点相等,在子树的更深处可能存在比根节点大,但比当前左右子节点小的值,这就好像在比赛中,有一些队伍虽然没有直接和冠军竞争,但实力介于冠军和我们最初认为的“亚军”(根节点左右子节点)之间。
    • 第二强队伍(第二小值)与冠军(根节点最小值)的关联
      • 你说的“第二强的一定和冠军交过手”类比到二叉树中,有一定的相似性。在二叉树中,真正的第二小的值一定是和根节点的值(最小的值)有比较关系的。它要么是根节点左右子节点中的较大值(如果存在差异),要么是在子树中比根节点值大的其他值。但不能简单地通过根节点左右子节点来判断,而是要遍历整个二叉树,就像要考虑整个欧冠比赛的所有队伍一样,来找到所有比根节点值大的节点值,然后从中确定第二小的值。
  2. 总结
    • 这个类比很形象地说明了不能简单地根据二叉树的局部结构(如根节点左右子节点)来确定第二小的值,而是要像考虑整个欧冠比赛的队伍情况一样,全面地考虑二叉树中所有节点的值,才能准确地找到第二小的值。

所以本质上这道题还是遍历

遍历 + set() + 排序
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def findSecondMinimumValue(self, root: TreeNode) -> int:"""先序遍历+set"""s = set()def dfs(node):if not node:return           nonlocal ss.add(node.val)dfs(node.left)dfs(node.right)dfs(root)min1 = float('inf') # 最小min2 = float('inf') # 第二小# 则关键逻辑是找到s中有没有一个val,满足 min1 < val < min2 # 如果for val in s:if val < min1:     # 存在一个val比最小的min1还要小,就说明要更新min1为val,且更新min2为valmin2 = min1    # 更新min2min1 = val     # elif val < min2 :  # val比min1大比min2小,就是第二大| 或者等于,也就是第二大的值!!!min2 = val     # min2已经更新为上一轮的min1了!,此时val就是第二大的min2!return -1 if min2 == float('inf') else min2       

另一种写法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def findSecondMinimumValue(self, root: TreeNode) -> int:"""先序遍历"""def helper(root, val): # 当前要遍历的节点,用于比较的值val,调用的时候直接调用根节点值,也就是最小值!!!            if not root:     # 递归终止条件,到头return -1    # 这道题找值,这里应该返回值,有的题不返回值# 关键逻辑:val是要比较的值,root.val是当前节点的值if root.val > val:# 当前节点值大于参考值,当前值有可能是!!第二小!!return root.val# 递归遍历左右子树,且传入当前节点值作为参考# 如果走到头都没有发现比val大的,返回-1表示这条路不存在left = helper(root.left, val)  # 注意这里val!并没有在每次递归时改变!!right = helper(root.right, val) # !val始终时根节点,也就是最小!!# 处理左右子树返回的结果!如果某个子树返回的值是-1,即到头没发现第二小!就返回另一边树的值if left < 0:return rightif right < 0:return left# 如果左右都有返回值,小的才是我们要找的第二小!return min(left, right)return helper(root, root.val)    
  1. 定义辅助函数
    • 定义 helper 函数,接受当前节点 root 和参考值 val(初始为根节点值)。
  2. 递归遍历与判断
    • 若当前节点为空,返回 -1。
    • 若当前节点值大于参考值,返回该节点值(可能是第二小值)。
    • 递归遍历左右子树,获取左右子树中可能的第二小值 leftright
  3. 处理子树返回结果
    • left 小于0,返回 right;若 right 小于0,返回 left;若都大于等于0,返回 min(left, right)
  4. 最终调用
    • 外部调用 helper 函数从根节点开始遍历二叉树,返回最终找到的第二小值(若不存在则为 -1)。

总的来说,这段代码通过深度优先搜索(DFS)的方式递归地遍历二叉树,在遍历过程中根据节点值与参考值的比较以及左右子树的返回结果来逐步确定可能的第二小的值,直到遍历完整个二叉树得出最终答案。

相关文章:

【二叉树】【2.1遍历二叉树】【刷题笔记】【灵神题单】

关注二叉树的三个问题&#xff1a; 什么情况适合自顶向下&#xff1f;什么时候适合用自底向上&#xff1f;一般来说&#xff0c;DFS的递归边界是空节点&#xff0c;什么情况下要额外把叶子节点作为递归边界&#xff1f;在什么情况下&#xff0c;DFS需要有返回值&#xff1f;什…...

【深度学习】【RKNN】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【RKNN】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转rknnpytorch转onnxonnx转rkn…...

刷题日常(移动零,盛最多水的容器,三数之和,无重复字符的最长子串)

移动零 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 俩种情况&#xff1a; 1.当nums[i]为0的时候 直接i 2.当nums[i]不为0的时候 此时 …...

【单元测试】【Android】JUnit 4 和 JUnit 5 的差异记录

背景 Jetbrain IDE 支持生成 Test 类&#xff0c;其中选择JUnit5 和 JUnit&#xff0c;但是感觉这不是标准的单元测试&#xff0c;因为接口命名吧。 差异对比 两者生成的单测API名称同原API&#xff0c;没加test前缀的。使用差异主要表现在&#xff1a; setUp &#xff06; …...

LangChain——HTML文本分割 多种文本分割

Text Splitters 文本分割器 加载文档后&#xff0c;您通常会想要对其进行转换以更好地适合您的应用程序。最简单的例子是&#xff0c;您可能希望将长文档分割成更小的块&#xff0c;以适合模型的上下文窗口。 LangChain 有许多内置的文档转换器&#xff0c;可以轻松地拆分、组…...

Spring事务和事务传播机制

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 目录 1.事务 1.1 什么是事务? 1.2 为什么需要事务? 1.3 事务的操作 2. Spring 中的事务 1. 编程式事务 2. 声明式事务Tra…...

STM32F103外部中断配置

一、外部中断 在上一节我们介绍了STM32f103的嵌套向量中断控制器&#xff0c;其中包括中断的使能、失能、中断优先级分组以及中断优先级配置等内容。 1.1 外部中断/事件控制器 在STM32f103支持的60个可屏蔽中断中&#xff0c;有一些比较特殊的中断&#xff1a; 中断编号13 EXTI…...

ChatGPT的应用场景:开启无限可能的大门

ChatGPT的应用场景&#xff1a;开启无限可能的大门 随着人工智能技术的快速发展&#xff0c;自然语言处理领域迎来了前所未有的突破。其中&#xff0c;ChatGPT作为一款基于Transformer架构的语言模型&#xff0c;凭借其强大的语言理解和生成能力&#xff0c;在多个行业和场景中…...

计算机毕业设计 | SpringBoot+vue社区医院管理系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 互联网概念的产生到如今的蓬勃发展&#xff0c;用了短短的几十年时间就风靡全球&#xff0c;使得全球各个行业都进行了互联网的改造升级&#xff0c;标志着互联网浪潮的来临。在这个新的时代&#xff0c;各行各业都充分考虑互联网是否能与本行…...

直播实时美颜平台开发详解:基于视频美颜SDK的技术路径

视频美颜SDK作为实现实时美颜的关键技术&#xff0c;为开发者提供了高效、灵活的解决方案。本篇文章&#xff0c;小编将以“基于视频美颜SDK的技术路径”为主题&#xff0c;深入解析直播实时美颜平台的开发要点。 一、视频美颜SDK的作用与优势 视频美颜SDK是一种集成化的开发工…...

一个专为云原生环境设计的高性能分布式文件系统

大家好&#xff0c;今天给大家分享一款开源创新的分布式 POSIX 文件系统JuiceFS&#xff0c;旨在解决海量云存储与各类应用平台&#xff08;如大数据、机器学习、人工智能等&#xff09;之间高效对接的问题。 项目介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统&am…...

【Elasticsearch】开启大数据分析的探索与预处理之旅

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

【算法】欧几里得与拓展欧几里得算法

目录 一、欧几里得算法 二、拓展欧几里得算法 2.1 裴蜀定理 2.2 拓展欧几里得算法 2.3 例题 三、线性同余方程 3.1 概念 3.2 例题 一、欧几里得算法 欧几里得算法又称辗转相除法&#xff0c;可用于求解两个数的最大公约数 其思路&#xff1a; gcd(a, b) gcd(b, a%b…...

组合数的求法

1.如果是多组查询的话&#xff0c;需要用数组去储存阶乘的值 n!/(m!(n-m)!) P4071 [SDOI2016] 排列计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<cstdio> #include<iostream> #include<map> #include<cstring> #include<cmath&g…...

【环境搭建】更新Docker Compose到v2.x版本以支持--profile选项

Docker版本陈旧也是搭建的环境起不来的一个重要原因&#xff0c;比如 --profile 选项是 Docker 20.10.0 版本及以上版本才开始支持的&#xff0c;在 Docker Compose v2.1&#xff08;及以上版本&#xff09;中引入用于对服务进行分组和按需启动。 更新 Docker Compose 到 v2.x…...

解决 java -jar 报错:xxx.jar 中没有主清单属性

问题复现 在使用 java -jar xxx.jar 命令运行 Java 应用程序时&#xff0c;遇到了以下错误&#xff1a; xxx.jar 中没有主清单属性这个错误表示 JAR 文件缺少必要的启动信息&#xff0c;Java 虚拟机无法找到应用程序的入口点。本文将介绍该错误的原因以及如何通过修改 pom.xm…...

AIGC-----AIGC在虚拟现实中的应用前景

AIGC在虚拟现实中的应用前景 引言 随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术的应用也迎来了新的契机。AIGC与VR的结合为创造沉浸式体验带来了全新的可能性&#xff0c;这种组合不仅极大地降低了VR内容的…...

【博主推荐】C#的winfrom应用中datagridview常见问题及解决方案汇总

文章目录 1.datagridview绘制出现鼠标悬浮数据变空白2.datagridview在每列前动态添加序号2.1 加载数据集完成后绘制序号2.2 RowPostPaint事件绘制 3.datagridview改变行样式4.datagridview后台修改指定列数据5.datagridview固定某个列宽6.datagridview某个列的显示隐藏7.datagr…...

Selenium 自动化测试demo

场景描述&#xff1a; 模拟用户登录页面操作&#xff0c;包括输入用户名、密码、验证码。验证码为算数运算&#xff0c;如下&#xff1a; 使用到的工具和依赖&#xff1a; 1. Selenium&#xff1a;pip install selenium 2. 需要安装浏览器驱动&#xff1a;这里使用的是Edge 3…...

深度神经网络模型压缩学习笔记二:离线量化算法和工具、实现原理和细节

文章目录 一、离线量化基础概念二、离线量化难点三、离线量化算法介绍四、离线量化工具介绍五、离线量化工具整体设计结构六、离线量化工具代码解读七、实践&#xff1a;Dipoorlet量化MobileNet 一、离线量化基础概念 二、离线量化难点 三、离线量化算法介绍 四、离线量化工…...

uni-app运行 安卓模拟器 MuMu模拟器

最近公司开发移动端系统&#xff0c;使用真机时每次调试的时候换来换去的麻烦&#xff0c;所以使用模拟器来调试方便。记录一下安装和连接的过程 一、安装MuMu模拟器 百度搜索MuMu模拟器并打开官网或者点这里MuMu模拟器官网 点击下载模拟器 安装模拟器&#xff0c;如果系统…...

网络安全,文明上网(6)网安相关法律

列举 1. 《中华人民共和国网络安全法》&#xff1a; - 这是中国网络安全的基本法律&#xff0c;于2017年6月1日开始实施。该法律明确了网络运营者的安全保护义务&#xff0c;包括采取数据分类、重要数据备份和加密等措施。 2. 《中华人民共和国数据安全法》&#xff1a; …...

Perforce Automation With Python

11/2024 出版 MP4 |视频&#xff1a;h264&#xff0c; 19201080 |音频&#xff1a;AAC&#xff0c;44.1 KHz 语言&#xff1a;英语 |大小&#xff1a; 2.65 GB |时长&#xff1a; 5 小时 18 分钟 使用 Python 脚本简化与 Perforce 版本控制系统相关的生产流程 您将学 到什么 …...

卷积神经网络学习记录

目录 神经网络基础定义&#xff1a; 基本组成部分 工作流程 卷积层&#xff08;卷积定义&#xff09;【CONV】&#xff1a; 卷积层&#xff08;Convolutional Layer&#xff09; 特征提取&#xff1a;卷积层的主要作用是通过卷积核&#xff08;或滤波器&#xff09;运算提…...

Spring Cloud Alibaba

What is SCA Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件&#xff0c;方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务。 依托Spring Cloud Alibaba&#xff0c;您只需要添加一些注解和少量…...

【AI绘画】Midjourney进阶:色调详解(上)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调白色调淡色调明色调 &#x1f4af…...

【滑动窗口】找到字符串中所有字母异位词

文章目录 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> ret;int sLen s.size(), pLen p.size(), validChar;// 母串长度比子串长度还小 直接返回空vectorif (sLen < pLen)return ret;// …...

C++:final 关键字用于阻止类被继承或阻止虚函数被进一步重写

final 关键字的作用 C11 引入了 final 关键字&#xff0c;用于阻止类被继承或阻止虚函数被进一步重写。 防止类被继承&#xff1a;在类声明后添加 final&#xff0c;表示该类不能被继承。防止虚函数被重写&#xff1a;在虚函数声明后添加 final&#xff0c;表示该虚函数在派生…...

sql漏洞

目录 SQL漏洞产生的原因 未对用户输入进行验证和过滤&#xff1a; 动态SQL语句的拼接&#xff1a; 不安全的数据库配置&#xff1a; 缺乏安全意识和培训&#xff1a; 使用过时的技术或框架&#xff1a; 如何避免SQL漏洞产生 使用参数化查询&#xff1a; 对用户输入进行…...

SQL 复杂查询

目录 复杂查询 一、目的和要求 二、实验内容 &#xff08;1&#xff09;查询出所有水果产品的类别及详情。 查询出编号为“00000001”的消费者用户的姓名及其所下订单。&#xff08;分别采用子查询和连接方式实现&#xff09; 查询出每个订单的消费者姓名及联系方式。 在…...

在 PyTorch 训练中使用 `tqdm` 显示进度条

在 PyTorch 训练中使用 tqdm 显示进度条 在深度学习的训练过程中&#xff0c;实时查看训练进度是非常重要的&#xff0c;它可以帮助我们更好地理解训练的效率&#xff0c;并及时调整模型或优化参数。使用 tqdm 库来为训练过程添加进度条是一个非常有效的方式&#xff0c;本文将…...

PYNQ 框架 - 时钟系统 + pl_clk 时钟输出不准确问题

目录 1. 简介 2. PS 时钟计算 2.1 计算框架 2.2 KV260 的参考时钟 2.3 PL_CLK 设置 3. 测试 3.1 Block design 3.2 引脚绑定 3.3 使用 AD2 测量 3.4 调整分频 4. PYNQ 时钟驱动 4.1 源码解析 4.2 查看 PL_CLK 4.3 配置 PL_CLK 5. 总结 1. 简介 ZYNQ MPSoC 具有…...

【Reinforcement Learning】强化学习下的多级反馈队列(MFQ)算法

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…...

Cocos编辑器

1、下载 下载地址&#xff1a;https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接&#xff1a;https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…...

Linux kernel 堆溢出利用方法(三)

前言 本文我们通过我们的老朋友heap_bof来讲解Linux kernel中任意地址申请的其中一种比赛比较常用的利用手法modprobe_path&#xff08;虽然在高版本内核已经不可用了但ctf比赛还是比较常用的&#xff09;。在通过两道道近期比赛的赛题来讲解。 Arbitrary Address Allocation…...

文心一言与千帆大模型平台的区别:探索百度AI生态的双子星

随着人工智能技术的迅猛发展&#xff0c;越来越多的公司开始投入资源开发自己的AI解决方案。在中国&#xff0c;百度作为互联网巨头之一&#xff0c;不仅在搜索引擎领域占据重要位置&#xff0c;还在AI领域取得了显著成就。其中&#xff0c;“文心一言”和“千帆大模型平台”便…...

JavaWeb——SpringBoot原理

10.1. 配置优先级 10.1.1. 配置文件 properties > yml(推荐) > yaml 10.1.2. Java系统属性、命令行参数 命令行参数 > Java系统属性 > 配置文件 10.2. Bean管理 10.2.1. 手动获取bean ApplicationContext&#xff0c;IOC容器对象 10.2.2. bean作用域 10.2.3.…...

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…...

Oracle RAC 环境下数据文件误建在本地目录的处理过程

问题描述 在 Oracle RAC 环境中&#xff0c;有时会误将数据文件创建在本地目录&#xff0c;导致其他节点无法访问该数据文件&#xff0c;从而报出 ORA-01157 和 ORA-01110 错误。 问题分析 错误日志 Mon Nov 16 19:02:38 2021 Errors in file /u01/app/oracle/diag/rdbms/orc…...

使用R语言绘制简单地图的教程

今天主要讲的部分是绘制静态地图&#xff0c;使用的R语言绘图包是tmap&#xff0c;关于介绍就不多讲&#xff0c;下面开始代码的讲解&#xff0c;小白也可以放心食用。 1、绘制简单的单幅地图&#xff0c;这里以新西兰地区为例 #导入必要的包 library(tmap) library(sp) libr…...

【人工智能】基于PyTorch的深度强化学习入门:从DQN到PPO的实现与解析

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 深度强化学习(Deep Reinforcement Learning)是一种结合深度学习和强化学习的技术,适用于解决复杂的决策问题。深度Q网络(DQN)和近端策略优化(PPO)是其中两种经典的算法,被广泛应用于游戏、机器人控…...

学习threejs,使用设置lightMap光照贴图创建阴影效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshLambertMaterial…...

类和对象(中)

文章目录 目录1. 类的6个默认成员函数2. 构造函数3. 析构函数4. 拷贝构造函数5. 赋值运算符重载5.1 运算符重载5.2 赋值运算符重载5.3 日期类实现 6. const成员函数7. 取地址及const取地址操作符重载 目录 类的6个默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载cons…...

编程之路,从0开始:预处理详解(完结篇)

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;编程之路 这一篇预处理详解是我们C语言基础内容学习的最后一篇&#xff0c;也是我们的专栏&#xff…...

[chrome]黑色界面插件,PDF合并插件

Dark Reader_chrome插件下载,最新浏览器扩展,crx离线安装包 - 插件小屋 合并 PDF_chrome插件下载,最新浏览器扩展,crx离线安装包 - 插件小屋 下载的zip包解压成crx&#xff0c;然后把后缀名改为rar&#xff0c;然后解压&#xff0c;再导入解压的目录。...

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件&#xff1f;2. 什么是文件&#xff1f;3. 如何标识文件&#xff1f;4. 二进制文件和文本文件&#xff1f;5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…...

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…...

刷题日常(数据流中的中位数,逆波兰表达式求值,最长连续序列,字母异位词分组)

数据流中的中位数 描述 如何得到一个数据流中的中位数&#xff1f;如果从数据流中读出奇数个数值&#xff0c;那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值&#xff0c;那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()…...

Redis突然变慢,有哪些原因?

目录 一、存在bigkey 二、如果Redis 实例设置了内存上限 maxmemory&#xff0c;有可能导致 Redis 变慢 三、开启了内存大页 四、使用了Swap 五、网络带宽过载 六、频繁短连接 一、存在bigkey 如果Redis实例中存储了 bigkey&#xff0c;那么在淘汰删除 bigkey 释放内存时&…...

Qt入门1——认识Qt的几个常用头文件和常用函数

1.头文件 ① #include <QPushButton>——“按钮”头文件&#xff1b; ② #include <QLabel>——“标签”头文件&#xff1b; ③ #include <QFont>——“字体”头文件&#xff1b; ④#include <QDebug>——输出相关信息&#xff1b; 2. 常用函数/类的基…...