python解构赋值详解(包含leetcode226.翻转二叉树题目讲解以及python代码)

目录

一、背景

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, val=0, left=None, right=None):
#         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)代码解释:

  1. 首先,检查根节点 root 是否为空,如果为空,则直接返回。

  2. 创建一个空列表 result,用于存储遍历后的结果。

  3. 创建一个队列 queue,并将根节点 root 添加到队列中。

  4. 进入循环,循环条件为队列不为空。这个循环用于进行广度优先搜索遍历二叉树的每个节点。

  5. 在每一层的循环中,首先获取当前层的节点数量 level_size,用于控制内层循环的迭代次数。

  6. 创建一个空列表 current_level,用于存储当前层的节点。

  7. 在内层循环中,通过 pop(0) 操作从队列中取出一个节点,并将该节点的左右子节点交换位置。

  8. 如果节点的左子节点存在,则将左子节点加入队列 queue

  9. 如果节点的右子节点存在,则将右子节点加入队列 queue

  10. 循环结束后,返回翻转后的二叉树的根节点 root

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

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

相关文章

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(3)-系统数据集合设计

前言 前几章教程我们把ToDoList系统的基本框架搭建好了,现在我们需要根据我们的需求把ToDoList系统所需要的系统集合(相当于关系型数据库中的数据库表)。接下来我们先简单概述一下这个系统主要需要实现的功能以及实现这些功能我们需要设计那些…

互联网加竞赛 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习机器视觉的…

【RL】Value Iteration and Policy Iteration(利用迭代算法求解贝尔曼最优等式)

Lecture 4: Value Iteration and Policy Iteration Value Iteration Algorithm 对于Bellman最优公式: v f ( v ) m a x π ( r γ P π v ) \mathbf{v} f(\mathbf{v}) max_{\pi}(\mathbf{r} \gamma \mathbf{P}_{\pi} \mathbf{v}) vf(v)maxπ​(rγPπ​v) …

『运维备忘录』之 Sed 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(1)发现与明确问题

抱歉,过春节这几天,没有更新。赶紧续上。 人就是这样,放假之前呢,想着趁着这个假期,把很多之前没有做好的事情,都梳理好,该补的也补上,结果一个假期就这样过去了,很多想…

stm32:pwm output模块,记录一下我是用smt32,输出pwm波的记录--(实现--重要)

我是实现了输出pwm波,频率固定,占空比可以不断调整的方法,将PA0接到示波器上,可以看到是一个标准的PWM波,如图下面示波器图。 1,首先是ioc的配置 我刚开始设置的分频的倍数是7199,使得分频的太…

Fiddler抓包(网页、手机、MUMU模拟器)

前置条件:电脑上下载安装好了Fiddler,有浏览器 一、网页抓包 1、fiddler下载安装证书 Tools-Options 勾选下面两个框 点击下面的选项,信任证书 会弹出弹窗,点击yes(这个时候注意,DO_NOT_TRUST_FiddlerRo…

七天入门大模型 :大模型量化及低成本部署最佳实践

七天入门大模型已完成了5篇,喜欢记得收藏、关注、点赞。 七天入门大模型 :LLM大模型基础知识最全汇总七天入门大模型 :提示词工程 Prompt Engineering,最全的总结来了!七天入门大模型 :LLM和多模态模型高效…

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命:好像也挺实用的题目,也是比较经典吧 天命:把php的MD5漏洞都玩了一遍 第一关:MD5绕过 先声明一下:这题的MD5是php,不是mysql的MD5,把我搞迷糊了 一进来题目啥也没有,那么就要看…

人工智能学习与实训笔记(十五):Scikit-learn库的基础与使用

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 一、介绍 1. 1 Scikit-learn的发展历程及定义 1.2 理解算法包、算法库及算法框架之间的区别和联系 二、Scikit-learn官网结构 三、安装与设置 3.1 Python环境的安装与配置 3.2 Scikit-lea…

【Windows】MacOS制作纯净版Windows10安装U盘

方法一、在window系统中更新win10(不更新引导程序) cp -rp /Volumes/Windows10专业版\ 64位/* /Volumes/WIN10/https://baijiahao.baidu.com/s?id1760695844372493842&wfrspider&forpc 方法二、在window系统中更新win10(更新引导程…

软件实例分享,洗车店系统管理软件会员卡电子系统教程

软件实例分享,洗车店系统管理软件会员卡电子系统教程 一、前言 以下软件教程以 佳易王洗车店会员管理软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、会员卡号可以绑定车牌号或手机号 2、卡号也可以直接使用手机号&a…

优秀的电机驱动MCU:MM32SPIN360C

DC-DC电源布局注意点: 电源模块布局布线可提前下载芯片的datasheet(数据表),按照推荐的布局和布线进行设计。 1) 芯片电源接近原则: 对于为芯片提供电压的开关电源,应确保它尽量靠近芯片放置。这样可以避…

2024 CKS 题库 | 8、沙箱运行容器 gVisor

不等更新题库 CKS 题库 8、沙箱运行容器 gVisor Context 该 cluster 使用 containerd 作为 CRI 运行时。containerd 的默认运行时处理程序是 runc 。 containerd 已准备好支持额外的运行时处理程序 runsc (gVisor)。 Task 使用名为 runsc 的现有运行时处理程序,…

【打工日常】使用docker部署可视化工具docker-ui

一、docker-ui介绍 docker-ui是一个易用且轻量化的Docker管理工具,透过Web界面的操作,方便快捷操作docker容器化工作。 docker-ui拥有易操作化化界面,不须记忆docker指令,仅需下载镜像即可立刻加入完成部署。基于docker的特性&…

AGAST角点检测

一、AGAST角点检测 C #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/io.h> #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp> #include <p…

支付交易——跨境交易

摘要 老王兢兢业业经营生意多年&#xff0c;一步步从小杂货店做到现在&#xff0c;成立大型贸易公司。在做大做强的过程中&#xff0c;老王觉得国内市场已经饱和&#xff0c;竞争处处是红海。老王留意海外很多年了&#xff0c;决定走出去&#xff0c;转向海外:将国外的商品引进…

【51单片机】AD模数转换DA数模转换(江科大)

1.AD/DA介绍 AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转换为模拟信号 AD/DA转换打开了计算机与模拟信号的大门,极大的提高了计算机系统的应用范围,也为模拟信号数字化处理…

Java面向对象案例之打印机对象Printer(一)

类主要结构图 抽象类&#xff1a;Printer&#xff08;打印机作为父类&#xff09;子类&#xff1a;DotMatrixPrinter&#xff08;针式打印机类&#xff09;、InkpetPrinter&#xff08;喷墨打印机类&#xff09;、LaserPrinter&#xff08;激光打印机类&#xff09;测试类&…

【网络安全/计算机/编程】实用小工具推荐,让你的电脑更强大

在日常的电脑使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;比如找不到想要的音乐、不知道如何合并图片、蓝屏问题困扰等。 今天&#xff0c;我将向大家推荐几款实用的小工具&#xff0c;它们可以帮助我们更方便地解决这些问题。 首先&#xff0c;是PC洛雪音乐…