python coding with ChatGPT 打卡第19天| 二叉树:合并二叉树

相关推荐
python coding with ChatGPT 打卡第12天| 二叉树:理论基础
python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历
python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历
python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
python coding with ChatGPT 打卡第16天| 二叉树:完全二叉树、平衡二叉树、二叉树的所有路径、左叶子之和
python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和
python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树

合并二叉树

Key Points

将直接在 root1 上就地合并 root2,以避免额外的空间复杂度

相关题目

617. 合并二叉树

视频讲解

一起操作两个二叉树

重点分析

方法一:
递归(修改root1)

class Solution:def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:# 递归终止条件: #  但凡有一个节点为空, 就立刻返回另外一个. 如果另外一个也为None就直接返回None. if not root1: return root2if not root2: return root1# 上面的递归终止条件保证了代码执行到这里root1, root2都非空. root1.val += root2.val # 中root1.left = self.mergeTrees(root1.left, root2.left) #左root1.right = self.mergeTrees(root1.right, root2.right) # 右return root1 # ⚠️ 注意: 本题我们重复使用了题目给出的节点而不是创建新节点. 节省时间, 空间. 

方法二:
递归(创建新节点)

def mergeTrees(root1, root2):if not root1:return root2if not root2:return root1root = TreeNode(root1.val + root2.val)root.left = mergeTrees(root1.left, root2.left)root.right = mergeTrees(root1.right, root2.right)return root

方法三:
迭代法(修改root1)

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef mergeTrees(root1, root2):if not root1:return root2if not root2:return root1# 使用队列存储需要合并的节点对queue = [(root1, root2)]while queue:node1, node2 = queue.pop(0)# 如果两个节点都不为 None,则合并它们的值if node1 is not None and node2 is not None:node1.val += node2.val# 如果 node1 的左子节点为空,我们直接将 node2 的左子节点链接过来if not node1.left:node1.left = node2.leftelse:queue.append((node1.left, node2.left))# 对于右子节点执行相同的操作if not node1.right:node1.right = node2.rightelse:queue.append((node1.right, node2.right))return root1

方法四:
迭代法(新建节点)

def mergeTrees(root1, root2):if not root1 and not root2:return Noneelif not root1:return TreeNode(root2.val, root2.left, root2.right)elif not root2:return TreeNode(root1.val, root1.left, root1.right)else:# 创建一个新节点,值为两个节点值的和newNode = TreeNode(root1.val + root2.val)# 使用队列存储节点对,以并行遍历两棵树queue = [(root1, root2, newNode)]while queue:node1, node2, new_node = queue.pop(0)# 处理左子节点if node1.left or node2.left:if node1.left and node2.left:new_node.left = TreeNode(node1.left.val + node2.left.val)queue.append((node1.left, node2.left, new_node.left))elif node1.left:new_node.left = TreeNode(node1.left.val, node1.left.left, node1.left.right)else:  # node2.leftnew_node.left = TreeNode(node2.left.val, node2.left.left, node2.left.right)# 处理右子节点if node1.right or node2.right:if node1.right and node2.right:new_node.right = TreeNode(node1.right.val + node2.right.val)queue.append((node1.right, node2.right, new_node.right))elif node1.right:new_node.right = TreeNode(node1.right.val, node1.right.left, node1.right.right)else:  # node2.rightnew_node.right = TreeNode(node2.right.val, node2.right.left, node2.right.right)return newNode

在这里插入图片描述

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

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

相关文章

可解释性AI:打开人工智能决策的黑盒子

序言 随着人工智能(AI)的广泛应用,其在各个领域中的决策过程日益受到关注。然而,许多AI系统如同一个“黑盒子”,人们难以理解其内部的决策逻辑和原理。为了解决这一问题,可解释性AI(XAI)应运而生&#xff…

[word] word中怎么插入另外一个word文档 #媒体#职场发展

word中怎么插入另外一个word文档 word中怎么插入另外一个word文档?有有些小伙伴在制作文档的时候,可能需要用到多个文档进行配合制作,今天小Q来给大家演示一下,插入Word文档的方法,插入其他类型文档的方法也是一样的。…

【JavaScript 】finally() 方法和Filter() 方法

JavaScript 中的finally() 方法 finally是 JavaScript 构造中使用的方法try-catch。try它在and阻塞之后执行catch,无论 Promise 是已履行还是已拒绝。该函数的主要作用是执行必要的清理任务并向用户传达消息。一个常见的用例可能是通知用户“您的请求已被处理”&am…

宏观行业心得

OLAP的特点 电商这样的OLTP场景大家更熟悉。相比之下,OLAP的特点: 读相对多,1000row以上大批写入,不改已有数据查询时输出很多行、很少列,结果被过滤或聚合后能够在一台服务器的内存中单台服务器qps数百,…

Python 数据可视化之山脊线图 Ridgeline Plots

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 JoyPy 是一个基于 matplotlib pandas 的单功能 Python 包,它的唯一目的是绘制山脊线图 Joyplots(也称为 Ridgeline Plots&…

【C++】结构体变量的赋值细节

C中 结构体变量的赋值与数组在定义时的初始化(赋值)十分相似: ①它们定义在全局区时都会自动初始化为0 ②都是使用大括号的方式赋值 ③大括号中的值都是从前往后一一对应的进行赋值,如果大括号中的值的数量不够的话,后面那些没有被手动赋值的…

Qt程序设计-导出PDF

本文讲解如何实现导出PDF,包含如何使用HTML格式和添加图片。 实例如下: 创建项目,添加两个按钮,并在D盘提前准备好图片。 窗体的头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <QPrinter> #include <QPainter> #i…

第5章 数据库操作

学习目标 了解数据库&#xff0c;能够说出数据库的概念、特点和分类 熟悉Flask-SQLAlchemy的安装&#xff0c;能够在Flask程序中独立安装扩展包Flask-SQLAlchemy 掌握数据库的连接方式&#xff0c;能够通过设置配置项SQLALCHEMY_DATABASE_URI的方式连接数据库 掌握模型的定义…

SPSS基础操作:对数据按照样本观测值进行排序

在整理数据资料或者查看分析结果时&#xff0c;我们通常希望样本观测值能够按照某一变量的大小进行升序或者降序排列&#xff0c;比如我们想按照学生的学习成绩进行排序&#xff0c;按照销售额的大小对各个便利店进行排序等。以本章附带的数据4为例&#xff0c;如果要按照y4体重…

react中hook封装一个table组件 与 useColumns组件

目录 1&#xff1a;react中hook封装一个table组件依赖CommonTable / index.tsx使用组件效果 2&#xff1a;useColumns组件useColumns.tsx使用 1&#xff1a;react中hook封装一个table组件 依赖 cnpm i react-resizable --save cnpm i ahooks cnpm i --save-dev types/react-r…

年假作业day2

1.打印字母图形 #include<stdio.h> #include<string.h> int main(int argc, const char *argv[]) { int i,j; char k; for(i1;i<7;i) { for(j1;j<i;j) { printf("%c",_); } for(j0,…

【小沐学GIS】基于Python绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…