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,一经查实,立即删除!

相关文章

【C++搜索】DFS:排列与组合

1. 题目描述 排列与组合是常用的数学方法,桐桐刚刚学会了全排列,就想试试组合,组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…&…

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)发现与明确问题

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

单反相机用sd卡还是cf卡?相机cf卡和sd卡区别

随着科技的进步,单反相机成为了摄影爱好者和专业摄影师的必备工具。而在选择单反相机存储介质时,CF卡和SD卡成为了两种常见的选择。它们各有优缺点,适用于不同的摄影需求和场景。本文将深入探讨单反相机使用SD卡还是CF卡的问题,并…

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

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

【C++搜索】体积

题目描述 给你n个物品,每种物品有一个体积Vi,求从中取出若干物品能够组成的不同的体积和有多少种可能。例如,n3,Vi(1,3,4),那么输出6。6种不同体积和具体为1,3,4,5,7,8。 输入 第一行一个整数n; 第二行…

设备驱动开发_2

编译和调试 主要内容 写一个可加载模块编译和加载一个可加载模块使用printk 进行跟踪和调试使用跟踪和调试1 写一个可加载模块 内核头文件 linux/module.h module_init(e1000_init_module) static int __init e1000_init_module(void) module_exit (e1000_exit_module) stati…

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

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

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

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

数据结构实验之栈与队列七:出栈序列判定

数据结构实验之栈与队列七:出栈序列判定 Description 给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序…

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

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

物理机安装kali

ventoyU盘,ventoy做好后把kali的iso拷贝到U盘,设置U盘启动,选择kali.iso启动。 安装包 文件SHA256发布日期大小ventoy-1.0.97-windows.zip44fb53f26872c6304e1cb3d47b65d0613665666100c48deeee4cd87901fb500f2024-01-2415 MBventoy-1.0.97-linux.tar.g…

Python OpenCV 牛刀小试(练习)

BGR与RGB OpenCV在读取图像时,默认的颜色空间是BGR(蓝绿红),而在大多数其他的图像处理库和图像格式中,使用的颜色空间是RGB(红绿蓝)。因此,当你需要使用OpenCV处理图像,然…

python系统学习Day3

section4 python function part one:函数的参数 python函数的参数共有五种类型 #位置参数 def power(x):return x * x#默认参数 def power(x, n 2) #设置默认值(可省略)s 1while n > 0:n n - 1s s * xreturn s#note print(默认参数必…

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

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

【leetcode刷题之路】面试经典150题(1)——数组/字符串

文章目录 1 数组/字符串1.1 【排序】合并两个有序数组1.2【双指针】移除元素1.3 【双指针】删除有序数组中的重复项1.4 【双指针】删除有序数组中的重复项 II1.5 【数学】多数元素1.6 【数组】轮转数组1.7 【动态规划】买卖股票的最佳时机1.8 【贪心】买卖股票的最佳时机 II1.9…