python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
相关推荐
python coding with ChatGPT 打卡第12天| 二叉树:理论基础
python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历
python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历
文章目录
- 翻转二叉树
- Key Points
- 相关题目
- 视频讲解
- 重点分析
- 递归遍历
- 层序遍历
- 对称二叉树
- Key Points
- 相关题目
- 视频讲解
- 重点分析
- 递归法
- 迭代法
翻转二叉树
Key Points
- 只要把
每个节点的左右孩子翻转一下,就可以达到整体翻转的效果 - 可选择深度优先遍历(递归遍历)或广度优先遍历(层序遍历)
相关题目
226. 翻转二叉树
视频讲解
翻转二叉树
重点分析
递归遍历
前序:
def invertTreePreOrder(root):if not root:return Noneroot.left, root.right = root.right, root.leftinvertTreePreOrder(root.left)invertTreePreOrder(root.right)return root
中序:
def invertTreeInOrder(root):if not root:return NoneinvertTreeInOrder(root.left)root.left, root.right = root.right, root.leftinvertTreeInOrder(root.left) # 注意:这里应该再次调用左子树return root
在中序遍历中,我们先递归地处理左子树,然后交换当前节点的左右子节点,最后处理右子树。注意,由于我们在交换后再递归右子树,实际上我们需要两次递归左子树。
中序 法2:
def invertTree(root):if not root:return rootright = root.right # 先把右子树存起来# 左invertTree(root.left)# 根root.left, root.right = root.right, root.left# 右invertTree(right)return root
后序:
def invertTreePostOrder(root):if not root:return NoneinvertTreePostOrder(root.left)invertTreePostOrder(root.right)root.left, root.right = root.right, root.leftreturn root
层序遍历
def inverTree(root):if not root:return rootqueque_record = [root]while queque_record:node = queque_record.pop(0)node.left, node.right = node.right, node.left # 这里不管是先翻转左右节点还是先加入左右节点都可以if node.left:queque_record.append(node.left)if node.right:queque_record.append(node.right)return root

在实现迭代法的过程中,有同学问了:递归与迭代究竟谁优谁劣呢?
从时间复杂度上其实迭代法和递归法差不多(在不考虑函数调用开销和函数调用产生的堆栈开销),但是空间复杂度上,递归开销会大一些,因为递归需要系统堆栈存参数返回值等等。
递归更容易让程序员理解,但收敛不好,容易栈溢出。
这么说吧,递归是方便了程序员,难为了机器(各种保存参数,各种进栈出栈)。
在实际项目开发的过程中我们是要尽量避免递归!因为项目代码参数、调用关系都比较复杂,不容易控制递归深度,甚至会栈溢出。
对称二叉树
Key Points
二叉树类的题目,确定遍历顺序非常重要
相关题目
101. 对称二叉树
视频讲解
同时操作两个二叉树
重点分析
递归法
def isSymmetric(root):if not root:return Truereturn compare(root.left, root.right)def compare(left, right):if not left and not right:return Trueif not left:return Falseif not right:return Falseif left.val != right.val:return Falsecon1 = compare(left.left, right.right)con2 = compare(left.right, right.left)if con1 and con2:return Truereturn False

迭代法
使用栈
def isSymmetric(root):if not root:return Truestack_record = [(root.left, root.right)]while stack_record:left, right = stack_record.pop()if not left and not right:continue # 不能直接return Trueif not left:return Falseif not right:return Falseif left.val != right.val:return Falsestack_record.append([left.left, right.right])stack_record.append([left.right, right.left])return True
使用队列:
def isSymmetric(root):if not root:return Truequeue_record = [(root.left, root.right)]while queue_record:left, right = queue_record.pop(0)if not left and not right:continue # 不能直接return Trueif not left:return Falseif not right:return Falseif left.val != right.val:return Falsequeue_record.append([left.left, right.right])queue_record.append([left.right, right.left])return True

相关文章:
python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 文章目录 翻转二叉树Key Points相关题目视频讲解重点分析递归遍历…...
Python(19)Excel表格操作Ⅰ
目录 导包 读取EXCEL文件 1、获取worksheet名称 2、设定当前工作表 3、输出目标单元格数据 4、工作表.rows(行) 5、工作表.columns(列) 小结 导包 要想使用 python 操作 Excel 文件,应当导入 openpyxl 包。在…...
HiveSQL题——聚合函数(sum/count/max/min/avg)
目录 一、窗口函数的知识点 1.1 窗户函数的定义 1.2 窗户函数的语法 1.3 窗口函数分类 聚合函数 排序函数 前后函数 头尾函数 1.4 聚合函数 二、实际案例 2.1 每个用户累积访问次数 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2 各直播间最大的同时在线人数 …...
计算机是什么做的
背景 虽然我是科班出身的,但是上大学时候,对这些内容并不感兴趣,只是简单的进行做题,考试而已。并没有思考,为啥学计算机组成原理,模电数电,微机原理,单片机,操作系统啥…...
C++多线程1(复习向笔记)
创建线程以及相关函数 当用thread类创建线程对象绑定函数后,该线程在主线程执行时就已经自动开始执行了,join起到阻塞主线程的作用 #include <iostream> #include <thread> #include <string> using namespace std; //测试函数 void printStrin…...
代理IP在游戏中的作用有哪些?
游戏代理IP的作用是什么?IP代理软件相当于连接客户端和虚拟服务器的软件“中转站”,在我们向远程服务器提出需求后,代理服务器首先获得用户的请求,然后将服务请求转移到远程服务器,然后将远程服务器反馈的结果转移到客…...
SVN Previous operation has not finished; run ‘cleanup‘ if it was interrupted
SVN cleanup出现下面的提示: svn: E155017: Can’t install ‘*’ from pristine store, because no checksum is recorded for this file svn报错:“Previous operation has not finished; run ‘cleanup’ if it was interrupted“ 解决办法 当遇到…...
MATLAB知识点:MATLAB的文件管理
讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。 MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自第2章 上一章我们说过,MATLAB是一款非常强…...
【深度学习】MNN ImageProcess处理图像顺序,逻辑,均值,方差
文章目录 介绍Opencv numpy等效的MNN处理 介绍 MNN ImageProcess处理图像是先reisze还是后resize,均值方差怎么处理,是什么通道顺序?这篇文章告诉你答案。 Opencv numpy 这段代码是一个图像预处理函数,用于对输入的图像进行一系…...
代码随想录算法训练营29期Day35|LeetCode 860,406,452
文档讲解:柠檬水找零 根据身高重建队列 用最小数量的箭引爆气球 860.柠檬水找零 题目链接:https://leetcode.cn/problems/lemonade-change/description/ 思路: 很简单,模拟即可。统计五美元、十美元和十五美元的个数。给五美元…...
20240130金融读报1分钟小得01
1、开放银行本质上是以用户需求为核心,以场景服务为切入点的共享平台金融模式,一定程度上加快了商业银行“隐形”和金融服务的无缝和泛在 2、利用自身优势进行差异化竞争,比如农信的客户面对面交流、全方位覆盖、政银紧密合作。针对劣势进行互…...
刷力扣题过程中发现的不熟的函数
C中不熟的函数 1.memset() 头文件:<string.h> void *memset(void *s,int c,unsigned long n); 为指针变量s所指的前n个字节的内存单元填充给定的int型数值c 如: int a[10]; memset(a,0,sizeof(a)); //将数组a中的数全部赋值为02.sort() &#…...
native2ascii命令详解
native2ascii命令详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入研究一个在Java开发中常用的命令——native2ascii,解析…...
什么是Vue Vue入门案例
一、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架 Vue2官网:Vue.js 1.什么是构建用户界面 基于数据渲染出用户可以看到的界面 2.什么是渐进式 所谓渐进式就是循序渐进,不一定非得把V…...
【C/Python】GtkApplicationWindow
一、C语言 GtkApplicationWindow 是 GTK 库中用于创建应用程序主窗口的一个控件。 首先,需要确保环境安装了GTK开发库。然后,以下是一个简单的使用 GtkApplicationWindow 创建一个 GTK 应用程序的示例: #include <gtk/gtk.h>static …...
SpringBoot自定义全局事务
1.说明 关于EnableTransactionManagement注解,可加可不加,加注解保证规范性。 2.核心代码 /** * author: wangning * date: 2024/1/23 16:19 */ Aspect Configuration ConditionalOnClass({TransactionManager.class, TransactionFactory.class}) pub…...
【FINEBI】finebi中常用图表类型及其适用场景
柱状图(Bar Chart): 比较不同类别或组之间的数量差异:柱状图可以用于比较不同产品、地区、时间段等的销售额、市场份额等。 显示不同时间段的数据变化:通过绘制柱状图,可以观察到销售额、网站流量等随时间…...
Kaggle竞赛系列_SpaceshipTitanic金牌方案分析_数据分析
文章目录 【文章系列】【前言】【比赛简介】【正文】(一)数据获取(二)数据分析1. 缺失值2. 重复值3. 属性类型分析4. 类别分析5. 分析目标数值占比 (三)属性分析1. 对年龄Age分析(1)…...
Tortoise-tts Better speech synthesis through scaling——TTS论文阅读
笔记地址:https://flowus.cn/share/a79f6286-b48f-42be-8425-2b5d0880c648 【FlowUs 息流】tortoise 论文地址: Better speech synthesis through scaling Abstract: 自回归变换器和DDPM:自回归变换器(autoregressive transfo…...
单元测试工具JEST入门——纯函数的测试
单元测试工具JEST入门——纯函数的测试 什么是测试❓🙉 我只是开发而已?常见单元测试工具 🔧jest的使用👀 首先你得知道一个简单的例子🌰😨 Oops!出现了一些问题👏 高效的持续监听&a…...
效率翻倍!LiuJuan Z-Image多图批量生成攻略,一次产出N张创意作品
效率翻倍!LiuJuan Z-Image多图批量生成攻略,一次产出N张创意作品 在AI图片生成领域,最令人头疼的莫过于反复调整参数、等待单张图片生成的低效流程。今天,我将分享如何利用LiuJuan Z-Image Generator的批量生成功能,一…...
Excel VBA 技巧:让工作表中的形状宏自适应
在日常工作中,Excel 不仅仅是数据处理的工具,更是我们自动化办公的利器。今天我们要探讨的是如何让Excel工作表中的形状宏能够自适应地工作,即使在复制工作表到新的工作簿时也能保持其功能性。 问题背景 假设我们有一个工作簿BOOK1,其中包含一个名为TEST的工作表和一个名…...
从光纤通信到超快光学:非线性薛定谔方程仿真在工程研究中的5个典型应用场景
从光纤通信到超快光学:非线性薛定谔方程仿真在工程研究中的5个典型应用场景 当一束激光脉冲在光纤中传输时,其强度分布会随时间发生微妙变化——这种看似简单的物理现象背后,隐藏着非线性光学中最富魅力的数学描述:非线性薛定谔方…...
comsol实能带建模、与Matlab能带数据后处理 文献复现---“周期嵌套声学黑洞结构的复...
comsol实能带建模、与Matlab能带数据后处理 文献复现---“周期嵌套声学黑洞结构的复能带和凋落波研究”-“二维声学黑洞声子晶体的宽频振动抑制”-“ Broadband vibration mitigation using a two-dimensional acoustic black hole phononic crystal” 包括comsol实能带模型、M…...
海南自由贸易港借助“.CN”域名塑造线上专属品牌形象
自海南自由贸易港全岛封关运作以来,市场主体加速集聚,数字化转型需求持续释放,“.CN”域名逐步融入自贸港园区与入驻企业的线上品牌构建场景,成为其彰显数字化身份的重要标识。作为政策落地与产业集聚的核心平台,海南自…...
OpenClaw+Qwen2.5-VL-7B实战:飞书机器人自动处理图片文档
OpenClawQwen2.5-VL-7B实战:飞书机器人自动处理图片文档 1. 为什么需要自动化图片文档处理 上周团队周会上,产品经理小张分享了一组用户调研的手写笔记照片。这些宝贵的一线反馈需要整理成电子版归档,但手动转录不仅耗时,还容易…...
前端手写电子签系统实战:SVG为何是合同图片合成的最优解
一、前端手写电子签系统核心需求拆解 在开发手写电子签系统时,前端需满足以下核心业务与技术需求,这也是方案选型的核心依据: 高清无损:合同属于正式法律文件,签名、填写的字段文字需保证任意缩放、打印后均清晰无失真…...
newTimer嵌入式定时器库:跨平台非阻塞延时与状态机设计
1. newTimer 定时器库深度解析:跨平台嵌入式精准延时与状态管理方案1.1 库定位与工程价值newTimer是一个轻量级、高度可移植的 C 定时器抽象库,专为资源受限的嵌入式微控制器设计。其核心价值不在于替代硬件定时器外设,而在于提供统一、语义清…...
2025届必备的五大降重复率神器横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 常见问题是在学术写作以及论文发表进程里,查重率过高。降重网站作为辅助工具&…...
Go语言的项目结构:从单体到微服务
Go语言的项目结构:从单体到微服务 项目结构的重要性 在软件开发中,项目结构是影响代码质量和可维护性的关键因素。一个良好的项目结构可以: 提高代码的可读性和可维护性促进团队协作和代码共享便于测试和部署支持代码的重用和扩展降低项目…...
