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://xiahunao.cn/news/2779022.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言——打印乘法口诀表】

乘法表: 我们可以定义一个i控制行的变化,外加看上图的表得知我们需要用到循环结构,i是行需要不停的加加,因此,for循环比较好用,可以用两个嵌套的循环,外层循环即用到的i表示的是每一行的打印&am…

阿里云游戏服务器多少钱一年?

阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…

《计算思维导论》笔记:10.4 关系模型-关系运算

《大学计算机—计算思维导论》(战德臣 哈尔滨工业大学) 《10.4 关系模型-关系运算》 一、引言 本章介绍数据库的基本数据模型:关系模型-关系运算。 二、什么是关系运算 在数据库理论中,关系运算(Relational Operatio…

PKI - 借助Nginx 实现Https_使用CA签发证书

文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接…

代码随想录算法训练营day15||二叉树part02、102.二叉树的层序遍历、 226.翻转二叉树(优先掌握递归)、101. 对称二叉树 (优先掌握递归)

102.二叉树的层序遍历 题目:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 接下来我们再来介绍二叉树的另一种遍历方式:层序遍历。 层序遍历一个二叉树。就是…

Centos7之忘记Root用户密码的处理方式

Centos7之忘记Root用户密码的处理方式 文章目录 Centos7之忘记Root用户密码的处理方式1.场景描述2. 重置密码1. 重启系统进入编辑界面2. 按方向键下键↓,找到设置语言的地方3. 进入bash界面后,可以输入passwd命令重新设置root密码 1.场景描述 长时间未使…

前后端分离nodejs+vue流浪狗宠物领养公益网站

1.发现公益:主要是根据社会上的调研,来收集的社会上有关流浪狗的公益活动,发布在公益网站上能被更多人发现,主要让更多人能参与到公益活动中来,并调动群众的同情心和爱心,借此希望在养宠物的主人能避免自己…

vue3 之 商城项目—项目搭建起步

1.创建项目 1️⃣ npm init vuelatest2️⃣ npm install3️⃣ npm run dev4️⃣目录调整 2.git管理项目 基于creact-vue创建出来的项目默认没有初始化git仓库,需要我们手动初始化 执行命令 git init git add. git commit -m init3.项目起步—配置别名路径联…

前端开发_AJAX基本使用

AJAX概念 AJAX是异步的JavaScript和XML(Asynchronous JavaScript And XML)。 简单点说,就是使用XMLHttpRequest对象与服务器通信。 它可以使用JSON,XML,HTML和text文本等格式发送和接收数据。 AJAX最吸引人的就是它的“异步"特性&am…

顶级思维方式——对优秀人才的定义

目录 1、乔布斯对优秀人才的定义 2、 乔布斯对优秀人才的管理 3、感到压力焦虑的时候怎么办 注: 以下内容均来自乔布斯、贝索斯的采访视频摘录 1、乔布斯对优秀人才的定义 乔布斯: 公司规模变大之后,就会变得循规蹈矩。他们觉得只要遵守流…

MySQL数据库-索引概念及其数据结构、覆盖索引与回表查询关联、超大分页解决思路

索引是帮助mysql高效获取数据的数据结构,主要用来提高检索的效率,降低数据库的IO成本(输入输出成本(Input-Output Cost)),同时通过索引对数据进行排序也能降低数据排序的成本,降低了CPU的消耗。 Mysql的默认存储引擎InnoDB,InnoDB采用的B树的…

肯尼斯·里科《C和指针》第12章 使用结构和指针(2)双链表

12.3 双链表 单链表的替代方案就是双链表。在一个双链表中,每个节点都包含两个指针——指向前一个节点的指针和指向后一个节点的指针。这可以使我们以任何方向遍历双链表,甚至可以随意在双链表中访问。下面的图展示了一个双链表。 下面是节点类型的声明&…

算法刷题:移动零

移动零 .题目链接详解curdesc算法原理 答案 . 题目链接 移动零 详解 题目要求我们要把数组中所有的零都移动到数组的末尾,且要求其余数字顺序不改变.这道题,我们使用到的是双指针算法: 利用两个指针,将数组分为三个部分, 三个区间分别为 [0,desc][desc1,cur-1][cur,n-1] 在…

算法学习——LeetCode力扣二叉树篇1

算法学习——LeetCode力扣二叉树篇1 144. 二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 描述 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 示例 1: 输入:root [1,null,2,3] 输出&a…

电子电器架构 —— 区域控制器是未来架构的正解吗?

电子电器架构 —— 区域控制器是未来架构的正解吗? 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶…

C++ //练习 5.5 写一段自己的程序,使用if else语句实现把数字成绩转换成字母成绩的要求。

C Primer(第5版) 练习 5.5 练习 5.5 写一段自己的程序,使用if else语句实现把数字成绩转换成字母成绩的要求。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /***************************…

视觉开发板—K210自学笔记(四)

在点灯之后,我们就需要饿补一下相关的编程基础知识,了解基本语法,加深底蕴才能编写出更好的程序来。由于 MaixPy 是基于 MicroPython 之上进行开发构建的,提供给用户最终的接口是 Micropython ,所以在使用 MaixPy 开发…

C语言-----自定义类型-----结构体枚举联合

结构体和数组一样,都是一群数据的集合,不同的是数组当中的数据是相同的类型,但是结构体中的数据类型可以不相同,结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型,我们前面已经了解到过int,char,fl…

选择影视行业创业的原因,影视从业者创业成功的秘密

一、教程描述 本套教程是面向影视从业者的创业教程,主讲人将把自己的创业经验、行业观察、成长心得分享给大家。如果你正在创业,这门课可以让你飞速成长、弯道超车。主讲人积累的行业经验,会让你比大多数同行站的更高,看的更宽。…

KEIL-MDK的时间戳之time.h 结合gd32f1的RTC应用

KEIL-MDK的时间戳之time.h 的应用 1 时间戳介绍 现在物联网产品的在进行通讯的时候,需要加入时间戳的这个信息参数,方便服务器和产品之间交换时间信息。 时间戳是计算机系统中用来表示日期和时间的一种方式,通常是一个数字或者一串字符&am…