每日一题--合并二叉树

合并二叉树

问题描述

已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:如果节点存在于两棵树中,则将节点值相加;如果某个节点在一棵树中不存在,则直接使用另一棵树的节点值。例如:

两颗二叉树如下:

Tree 1

       1/   \3     2/5

Tree 2

       2/   \1     3\     \4     7

合并后的二叉树应该是:

       3/   \4     5/ \     \5   4     7
数据范围
  • 树上节点数量: 0 ≤ n ≤ 500 0 \leq n \leq 500 0n500
  • 每个节点的值在32位整型范围内。
进阶要求
  • 空间复杂度: O ( 1 ) O(1) O(1)
  • 时间复杂度: O ( n ) O(n) O(n)
示例
  • 输入1:

    {1,3,2,5},{2,1,3,#,4,#,7}
    

    返回值:

    {3,4,5,5,4,#,7}
    
  • 输入2:

    {1},{}
    

    返回值:

    {1}
    
代码实现
/*** struct TreeNode {*  int val;*  struct TreeNode *left;*  struct TreeNode *right;* };*//*** 创建一个新的节点* @param val 节点的值* @return 创建的节点*/
struct TreeNode* createNode(int val ) {struct TreeNode* newNode = (struct TreeNode*)malloc(sizeof(struct TreeNode));newNode->val = val;newNode->left = NULL;newNode->right = NULL;return newNode;
}/*** 递归遍历两个树并合并它们* @param root1 树1的当前节点* @param root2 树2的当前节点* @return 合并后的新节点*/
struct TreeNode* Traversal(struct TreeNode* root1, struct TreeNode* root2) {// 如果两个节点都为空,返回NULLif (!root1 && !root2) return NULL;// 创建一个新的节点来保存合并后的结果struct TreeNode* newNode = createNode(0);// 如果树1存在节点,则将其值加到新节点if (root1) {newNode->val += root1->val;}// 如果树2存在节点,则将其值加到新节点if (root2) {newNode->val += root2->val;}// 递归合并左子树newNode->left = Traversal(root1 ? root1->left : NULL, root2 ? root2->left : NULL);// 递归合并右子树newNode->right = Traversal(root1 ? root1->right : NULL, root2 ? root2->right : NULL);return newNode;
}/*** 合并两棵二叉树* @param t1 树1的根节点* @param t2 树2的根节点* @return 合并后的树的根节点*/
struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2) {// 调用递归函数进行树的合并return Traversal(t1, t2);
}
代码说明
  1. 创建节点createNode(int val)函数用于创建一个新的树节点,并将其左指针和右指针初始化为NULL

  2. 递归合并Traversal(struct TreeNode* root1, struct TreeNode* root2)函数使用递归遍历树1和树2。当树1和树2的对应节点存在时,将节点的值相加,并继续合并左子树和右子树。如果某一棵树的节点为空,则直接使用另一棵树的节点。

  3. 合并入口mergeTrees(struct TreeNode* t1, struct TreeNode* t2)函数是合并两棵二叉树的入口函数。它调用Traversal函数来进行递归合并。

总结

这道题目主要考察如何通过递归遍历两棵二叉树并将它们合并为一棵新的树。在合并过程中,如果某个节点在其中一棵树中不存在,就用另一棵树的节点来替代。通过递归的方式,我们可以高效地合并两棵树。

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

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

相关文章

云计算的概念与特点:开启数字化时代的新篇章

在当今数字化时代,云计算(Cloud Computing)已经成为推动技术创新和业务转型的核心力量。无论是大型企业、中小型企业,还是个人用户,云计算都为其提供了高效、灵活和经济的解决方案。本文将深入探讨云计算的概念及其核心特点,帮助读者全面了解这一革命性技术。 © ivw…

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…

分布式机器学习中【拓扑】与【通信】的区别和联系

在分布式机器学习中,拓扑和通信是两个重要的概念,它们虽然有一定的关联,但侧重点不同。下面我会逐一解释它们的定义、区别及其联系: 1. 拓扑(Topology): 拓扑指的是系统中不同节点&#xff08…

【fly-iot飞凡物联】(20):2025年总体规划,把物联网整套技术方案和实现并落地,完成项目开发和课程录制。

前言 fly-iot飞凡物联专栏: https://blog.csdn.net/freewebsys/category_12219758.html 1,开源项目地址进行项目开发 https://gitee.com/fly-iot/fly-iot-platform 完成项目开发,接口开发。 把相关内容总结成文档,并录制课程。…

MFC结构体数据文件读写实例

程序功能将结构体内数组数据写入文件和读出 2Dlg.h中代码: typedef struct Student {int nNum[1000];float fScore;CString sss;}stu; class CMy2Dlg : public CDialog { // Construction public:CMy2Dlg(CWnd* pParent NULL); // standard constructorstu stu1; ... } 2Dl…

rust 自定义错误(十二)

错误定义: let file_content parse_file("test.txt");if let Err(e) file_content {println!("Error: {:?}", e);}let file_content parse_file2("test.txt");if let Err(e) file_content {match e {ParseFileError::File > …

java+vue项目部署记录

目录 前言 一、java和vue 二、部署记录 1.获取代码 2.运行前端 3.运行后端 三、其他 1.nvm 总结 前言 近期工作需要部署一套javavue前后分离的项目,之前都略有接触,但属于不及皮毛的程度,好在对其他开发语言、html js这些还算熟&am…

零售业革命:改变行业的顶级物联网用例

mpro5 产品负责人Ruby Whipp表示,技术进步持续重塑零售业,其中物联网(IoT)正引领这一变革潮流。 研究表明,零售商们正在采用物联网解决方案,以提升运营效率并改善顾客体验。这些技术能够监控运营的各个方面…

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…

MySQL用户授权、收回权限与查看权限

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

spring boot中使用spring-security案例

项目结构 src └── main ├── java │ └── com.example.securitydemo │ ├── RestapiApplication.java │ ├── config │ │ └── SecurityConfig.java │ ├── controller │ │ └── UserController.java │ └── service │ └── CustomUserDetailsS…

XML实体注入漏洞攻与防

JAVA中的XXE攻防 回显型 无回显型 cve-2014-3574

996引擎 - NPC-添加NPC引擎自带形象

996引擎 - NPC-添加NPC引擎自带形象 截图参考添加NPC参考资料截图参考 添加NPC 编辑NPC表:Envir\DATA\cfg_npclist.xls 1.1. 需要临时隐藏NPC时可以在id前加 // 1.2. 如果NPC朝向不对,可以调整dir 列。(按8方向,上是0顺时针数。我这里给的4) 1.3. 形象代码:NPC代码、怪物…

mysql create table的用法

在MySQL中创建表的基本语法如下: CREATE TABLE table_name (column1 datatype,column2 datatype,column3 datatype,... );这里是一个例子,假设我们要创建一个名为employees的表,包含以下字段: id:一个整数类型的主键…

云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持

一.LNMP架构部署 1.1. LNMP服务搭建 1.磁盘信息 2.内存 3.负载信息 4.Nginx你们公司都用来干嘛 5.文件句柄(文件描述符 打开文件最大数量) 6.你处理过系统中的漏洞吗 SSH漏洞 7.你写过什么shell脚本 8.监控通过什么告警 zabbix 具体监控哪些内容 9.mysql redis查询 你好H…

页高速缓存与缓冲区缓存的应用差异

页高速缓存(Page Cache)与缓冲区缓存(Buffer Cache)是计算机系统中用于提高数据访问性能的两种不同类型的缓存机制,它们的差异主要体现在以下几个方面: 缓存目的 页高速缓存:主要用于加速对磁…

C语言程序设计:算法程序的灵魂

文章目录 C语言程序设计:算法程序的灵魂算法数据结构程序数据结构算法数值运算算法非数值运算算法 简单的算法举例【例2.1】求12345【例2.2】有50个学生,要求输出成绩在80分以上的学生的学号和成绩 简单的算法举例【例2.3】判定2000—2500年中的每一年是…

第28章 测试驱动开发模式:深入绿条模式及相关技术

写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…

SpringAI基于API对大语言模型调用

引言 随着人工智能技术的迅猛发展,大型语言模型(LLM)在各个领域的应用越来越广泛。SpringAI作为一个旨在简化AI集成的框架,为开发者提供了高效、便捷的工具来连接和调用这些大模型。本文将详细探讨如何使用SpringAI整合通义千问等…

Python 在Word中添加、或删除超链接

在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接,用户可以轻松地导航到相关信息,从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超…