当前位置: 首页 > news >正文

C++算法练习-day40——617.合并二叉树

题目来源:. - 力扣(LeetCode)

题目思路分析

题目:给定两棵二叉树 root1 和 root2,请合并这两棵树,即将 root2 中的每个节点合并到 root1 中,合并的规则是如果两个节点在同一位置(即具有相同的深度),则将它们的值相加。如果某个节点在 root1 中不存在,而在 root2 中存在,则直接将这个节点添加到 root1 中。

思路

  1. 递归遍历:由于树的性质,我们可以使用递归的方法来遍历树的每个节点。
  2. 节点处理:对于每对对应节点(root1 和 root2 中的同一位置的节点):
    • 如果两个节点都存在,则创建一个新节点,其值为两个节点值的和。
    • 如果其中一个节点不存在,则直接返回另一个节点(即如果 root1 中没有节点而 root2 中有,则直接返回 root2 的节点,反之亦然)。
  3. 递归调用:对左右子树递归调用合并函数。

代码:

/**  * Definition for a binary tree node.  * struct TreeNode {  *     int val;  *     TreeNode *left;  *     TreeNode *right;  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}  * };  */  
class Solution {  
public:  TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {  // 如果 root1 为空,直接返回 root2,因为要将 root2 合并到 root1 中  if(!root1){  return root2;  }  // 如果 root2 为空,直接返回 root1,因为 root1 没有变化  if(!root2){  return root1;  }  // 创建一个新节点,其值为两个节点值的和  TreeNode* node=new TreeNode(root1->val+root2->val);  // 递归调用 mergeTrees 合并左子树  node->left=mergeTrees(root1->left,root2->left);  // 递归调用 mergeTrees 合并右子树  node->right=mergeTrees(root1->right,root2->right);  // 返回合并后的新树的根节点  return node;  }  
};

知识点摘要

  1. 二叉树遍历:二叉树的遍历方式有前序、中序和后序遍历,以及层次遍历。本题使用了递归的方式遍历二叉树。
  2. 递归思想:递归是一种在函数内调用自身的编程技巧,适用于解决可以分解为相似子问题的问题。
  3. 动态内存分配:使用 new 关键字在堆上动态分配内存,用于创建新的节点。

通过这道题目,我们学习了如何使用递归方法合并两棵二叉树。递归的核心在于将大问题分解为小问题,并解决小问题,然后将结果组合起来解决大问题。在本题中,我们通过递归遍历树的每个节点,并合并对应位置的节点值,最终得到了合并后的树。这种方法不仅直观易懂,而且能够高效地解决问题。在实际应用中,递归方法在处理树结构或图结构的问题时非常有用,值得我们深入学习和掌握。

http://www.lryc.cn/news/484535.html

相关文章:

  • 2024数维杯国际赛C题【脉冲星定时噪声推断和大气时间信号的时间延迟推断的建模】思路详解
  • 【Linux】MTD 分区
  • MySQL(5)【数据类型 —— 字符串类型】
  • 【数据搜集】初创企业获客,B端数据获取
  • hhdb数据库介绍(9-13)
  • Jmeter基础篇(24)Jmeter目录下有哪些文件夹是可以删除,且不影响使用的呢?
  • 卷积、频域乘积和矩阵向量乘积三种形式之间的等价关系与转换
  • 【Vue】Vue3.0(二十二) v-model 在原始Dom元素、自定义输入组件中双向绑定的底层实现原理详解
  • 史上最强大的 S3 API?介绍 Prompt API。
  • 单片机设计智能翻译手势识别系统
  • 「Mac玩转仓颉内测版12」PTA刷题篇3 - L1-003 个位数统计
  • 飞书文档只读限制复制
  • 【WPF】Prism学习(二)
  • 【鸿蒙开发】第二十一章 Location位置服务
  • 《目标检测》R-CNN网络基础(RCNN,Fast-RCNN)
  • iOS中的定位实现(逆地理编码)及Info.plist位置权限详解
  • 【从零开始的LeetCode-算法】3270. 求出数字答案
  • Web认证机制 Cookie、Token、Session、JWT、OAuth2 解析
  • Docker 基础命令介绍和常见报错解决
  • 如何轻松导出所有 WordPress URL 为纯文本格式
  • 【进程概念精讲】
  • 帽子矩阵--记录
  • MySQL深入:B+树的演化、索引和索引结构
  • axios 实现 无感刷新方案
  • Python 三种方式实现自动化任务
  • 新型创业模式:退休创业。没有工资,不用投资,有时间就干,不强制做,赚钱按贡献分。
  • Android 项目依赖库无法找到的解决方案
  • 在Node.js中如何使用TypeScript
  • 链表两数加python
  • 免费的可以薅羊毛的cloudflare反向代理教程