莱芜网站优化费用,个体工商户注册查询,wordpress桌面应用,最新旅游新闻播报目录
一、背景
1.1问题
1.2原因
二、解构赋值
2.1定义
2.2解题应用
2.2.1翻转二叉树
2.2.2 思路以及代码 一、背景
1.1问题
在写二叉树相关代码赋值的时候发现这样的写法#xff0c;担心会发生这样的情况#xff1a;先把node.right的值给node.left#xff0c;在把…目录
一、背景
1.1问题
1.2原因
二、解构赋值
2.1定义
2.2解题应用
2.2.1翻转二叉树
2.2.2 思路以及代码 一、背景
1.1问题
在写二叉树相关代码赋值的时候发现这样的写法担心会发生这样的情况先把node.right的值给node.left在把node.left的值给node.right会发生覆盖问题即node.right和node.left的值都是node.right。 1.2原因
经过查阅但其实不会覆盖原有的值Python 的解释器是按照顺序依次执行的先计算等号右边的表达式然后再将结果赋值给等号左边的变量。
所以上述图片中代码其实相当于
temp (node.right, node.left)
node.left temp[0]
node.right temp[1]
这是一种非常常见的 Python 操作被称为解构赋值destructuring assignment。
二、解构赋值
2.1定义 解构赋值destructuring assignment它可以将多个变量同时赋值给多个值而无需使用额外的临时变量。 2.2解题应用
2.2.1翻转二叉树
题目来源力扣LeetCode官网 - 全球极客挚爱的技术成长平台
要求 2.2.2 思路以及代码
1解题思路
通过广度优先搜索遍历二叉树的每个节点并在遍历过程中不断交换每个节点的左右子节点从而实现了翻转二叉树
2代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val0, leftNone, rightNone):
# self.val val
# self.left left
# self.right right
class Solution:def invertTree(self, root: Optional[TreeNode]) - Optional[TreeNode]:if not root:returnresult []queue [root]while queue:level_size len(queue)current_level []for i in range(level_size):node queue.pop(0)node.left, node.right node.right, node.leftif node.left:queue.append(node.left)if node.right:queue.append(node.right)return root
3代码解释 首先检查根节点 root 是否为空如果为空则直接返回。 创建一个空列表 result用于存储遍历后的结果。 创建一个队列 queue并将根节点 root 添加到队列中。 进入循环循环条件为队列不为空。这个循环用于进行广度优先搜索遍历二叉树的每个节点。 在每一层的循环中首先获取当前层的节点数量 level_size用于控制内层循环的迭代次数。 创建一个空列表 current_level用于存储当前层的节点。 在内层循环中通过 pop(0) 操作从队列中取出一个节点并将该节点的左右子节点交换位置。 如果节点的左子节点存在则将左子节点加入队列 queue。 如果节点的右子节点存在则将右子节点加入队列 queue。 循环结束后返回翻转后的二叉树的根节点 root。