代码随想录学习Day 13

102.二叉树的层次遍历

题目链接

讲解链接

层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。而这种层序遍历方式就是图论中的广度优先遍历。

class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root:return []result = []queue = deque([root])  # 向队列中存入根结点while queue:level = []  # level用于储存每一层的结点for _ in range(len(queue)):  # len(queue)为当前层中元素的数量node = queue.popleft()level.append(node.val)if node.left:  # 将左孩子加入队列queue.append(node.left)if node.right:  # 右孩子加入队列queue.append(node.right)result.append(level)  # for循环每次结束时,代表遍历完了一层的结点,此时将level添加到result中return result

226.翻转二叉树

题目链接

讲解链接

要实现二叉树的反转,其实就是把每一个节点的左右孩子交换一下即可。关键在于遍历顺序,前中后序以及层次遍历的选择。遍历的过程中去翻转每一个节点的左右孩子就可以达到整体翻转的效果。本题使用前序、后序和层次相对容易。

递归法:

class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return Noneroot.left, root.right = root.right, root.left  # 直接交换左右孩子self.invertTree(root.left)  # 左孩子递归调用self.invertTree(root.right)  # 右孩子递归调用return root  # 每次返回当前根节点

迭代法(前序遍历):

class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return Nonestack = [root]while stack:node = stack.pop()node.left, node.right = node.right, node.left  # 与遍历的区别就是这步交换左右孩子if node.left:stack.append(node.left)if node.right:stack.append(node.right)return root  # 返回根结点

迭代法(层次遍历)

class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:if not root:return Nonequeue = deque([root])while queue:for _ in range(len(queue)):node = queue.popleft()node.left, node.right = node.right, node.leftif node.left:queue.append(node.left)if node.right:queue.append(node.right)return root

迭代法的代码与遍历的代码基本一致,仅需添加一句交换左右孩子即可。

101.对称二叉树

题目链接

讲解链接

一开始想到的做法是判断根节点的左子树和右子树的中序遍历顺序是否相同,如果相同则说明二叉树是对称的。这个做法可以涵盖大部分的情况,但在测试用例为图示的二叉树时会出错,因为在这种情况下左右子树的中序遍历顺序是相同的,但却并不对称。

正确思路:

判断对称二叉树要比较的是哪两个节点,要比较的不是左右节点!对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,所以其实要比较的是两个树(根节点的左右子树)。这里由于需要收集左右孩子的信息向上一层返回,所以必须采用后序遍历

class Solution:def compare(self, left, right):if not left and not right:  # 左右孩子均为空,则为对称return Trueelif left and not right:  # 左右孩子其中之一为空,另一个不为空,则为非对称return Falseelif not left and right:return Falseelif left.val != right.val:  # 左右孩子均不为空但值不相等,为非对称return Falseelse:outside = self.compare(left.left, right.right)  # 外侧情况,对应后序遍历的左inside = self.compare(left.right, right.left)  # 内侧情况,对应后序遍历的右result = outside and inside  # 外侧和内侧均为True,则表明二叉树是对称的,对应中return resultdef isSymmetric(self, root: Optional[TreeNode]) -> bool:if not root:  # 空树是对称的return Trueresult = self.compare(root.left, root.right)return result

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

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

相关文章

uni-app中web-view的使用

1. uni-app中web-view的使用 uni-app中的web-view是一个 web 浏览器组件,可以用来承载网页的容器,uni-app开发的app与web-view实现交互的方式相关简单,应用通过属性message绑定触发事件,然后在web-view的网页向应用 postMessage 触…

基于modbus TCP实现EPICS与西门子S7 1200系列1215C PLC的通信

PLC介绍 西门子系列PLC在国内的市场占比第一,1200系列中小型PLC,因其众多的产品序列、强大的通讯功能和丰富扩展模块,被使用在工业生产、自动化生产线、智能制造、机器人等各行各业。根据CPU的供电电源的型号和数字量输出的类型,…

太牛逼了!视频号下载器手机版(工具+方法)绝了

在众多的视频号下载中,可以说这个工具真的是很牛逼了!这里问大家一个问题! 你使用视频号下载工具以及视频号下载器都会不会因时间导致而失效呢? 自从小编使用了这款工具后,就不会因为视频失效而烦恼。 很多人免费推荐…

具有徊滞特性的欠压锁定功能的B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的

B3842/43/44是专为脱线和Dc-Dc开关电源应用设计的恒频电流型Pwd控制器内部包含温度补偿精密基准、供精密占空比调节用的可调振荡器、高增益混放大器、电流传感比较器和适合作功率MOST驱动用的大电流推挽输出颇以及单周期徊滞式限流欠压锁定、死区可调、单脉冲计数拴锁等保护电路…

ClickHouse 面试题及答案整理,最新面试题

ClickHouse的数据分布式存储机制是如何设计的? ClickHouse的数据分布式存储机制设计包括以下几个方面: 1、分片和复制: ClickHouse通过分片将数据水平划分为多个部分,每个部分存储在不同的节点上。每个分片可以有一个或多个副本…

翻译 《The Old New Thing》 - Why is a registry file called a “hive“?

Why is a registry file called a “hive“?https://devblogs.microsoft.com/oldnewthing/20030808-00/?p42943 为什么注册表文件被称为‘蜂巢’? Raymond Chen 2003年8月8日 分享一个没用的知识: 话说有一位 Windows NT 的开发者十分讨厌蜜蜂。于是&a…

9.串口通信

串口基本认识 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单&#x…

SMART PLC温度变化率计算功能块(算法框图+代码)

SMART PLC文章控制专用PID请参考下面文章链接: https://rxxw-control.blog.csdn.net/article/details/136702516https://rxxw-control.blog.csdn.net/article/details/136702516 1、监控下温度变化率 2、温度变化率计算功能块 3、计算周期到达

基于 Amazon Bedrock 的 Claude 3 体验:ChatGPT 已经 OUT 了吗?Claude 3 数据实测

文章目录 前言一、Claude 3 系列大模型开发团队二、基于 Amazon Bedrock 的 Claude 3 体验三、Claude 3 数据实测3.1、申请模型访问权限3.2、Claude 3 回答的严谨性3.3、验证 Claude 3 较于 ChatGPT-4 数据集更新时间3.4、“二分法”判断 Claude 3 训练数据截止时间3.5、综合二…

Java基础--128陷阱

问题引入 Integer a 123; Integer b 123; System.out.println(ab); 结果为true。 但是如果代码如下 Integer a 1230;Integer b 1230;System.out.println(ab); 这个的结果就是false。 问题解决 当Integer a 123时,其实他底层自动转换成了Integer a Inte…

第16篇:奇偶校验器

Q:本期我们将实现4位奇偶校验逻辑电路,即校验4位二进制代码中 “1” 的个数是奇数或偶数。 A:奇偶校验器的基本原理:采用异或运算对“1”的奇偶个数进行校验,从最高位依次往最低位进行连续异或运算。如果最后的异或运…

基于 NVIDIA Megatron-Core 的 MoE LLM 实现和训练优化

作者:黄俊,阿里云资深算法专家 本文将分享阿里云人工智能平台 PAI 团队与 NVIDIA Megatron-Core 团队在 MoE (Mixture of Experts) 大型语言模型(LLM)实现与训练优化上的创新工作。分享内容将按以下脉络展开: 1. 首先简…