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

代码随想录|二叉树|21合并二叉树

leetcode:617. 合并二叉树 - 力扣(LeetCode)

题目

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

注意:合并必须从两个数的根节点开始。 

思路

这题采用前序递归的方法,将两棵树对应的节点进行相加就可以了。

递归三部曲

(1)输入的是两棵树t1、t2的根节点,返回的是新树的根节点。

(2)如果t1=NULL,那么返回t2;如果t2=NULL,那么返回t1。

(3)将两棵树的元素加到一起,左子树相加,右子树相加。

代码如下:

class Solution
{
    public:
    /**
     * 合并两个二叉树
     * 当两个节点重叠时,将它们的值相加作为新节点的值
     * 如果一个节点为空,则返回另一个节点
     * 递归地对两个树的左子树和右子树进行合并
     * 
     * @param t1 第一个二叉树的根节点
     * @param t2 第二个二叉树的根节点
     * @return 合并后的二叉树的根节点
     */
    TreeNode *mergeTrees(TreeNode *t1,TreeNode *t2)
    {
        // 如果t1为空,直接返回t2
        if(t1==NULL) return t2;
        // 如果t2为空,直接返回t1
        if(t2==NULL) return t1;
        // 将两个节点的值相加,作为新节点的值
        t1->val = t1->val + t2->val;
        // 递归合并左子树
        t1->left = mergeTrees(t1->left,t2->left);
        // 递归合并右子树
        t1->right = mergeTrees(t1->right,t2->right);
        // 返回合并后的树的根节点
        return t1;
    }
};

总结

这题可以用很多种方法,不管前序、中序、后序,使用迭代法解决也很方便,二刷的时候我会全部补齐。

参考资料

 代码随想录

一起操作两个二叉树?有点懵!| LeetCode:617.合并二叉树_哔哩哔哩_bilibili 

相关文章:

  • 《GitHub网路访问不稳定:解决办法》:此文为AI自动生成
  • MCU详解:嵌入式系统的“智慧之心”
  • 代码随想录-回溯
  • 通过qemu仿真树莓派系统调试IoT固件和程序
  • C++ STL 深度解析:vector 的全面指南与进阶技巧
  • 【linux指令】一文掌握 Grep 的指令的详细用法
  • 微服务全局ID方案汇总
  • 《Java对象“比武场“:Comparable与Comparator的巅峰对决》
  • 如何筛选能实现共享自助健身房“灵活性”的物联网框架?
  • 深入理解Tomcat:Java Web服务器的安装与配置
  • ClickHouse合并任务与查询延迟专项测试
  • 优化GreatSQL日志文件空间占用
  • Git 克隆问题排查与解决方案
  • 【VSCODE 插件 可视化】:SVG 编辑插件 SVG Editor
  • 浅谈Linux中的Shell及其原理
  • 多线程(超详细) (ε≡٩(๑>₃<)۶ 一心向学)
  • JS内置构造函数有哪些???
  • Spring、Spring Boot、Spring Cloud 的区别与联系
  • 人工智能时代教育行业该如何转型:迎接挑战,塑造未来教育生态
  • 驻场运维服务方案书(Word文件)
  • 上海国际珠宝时尚功能区未来三年如何建设?六大行动将开展
  • 丹麦外交大臣拉斯穆森将访华
  • 时隔3年俄乌直接谈判今日有望重启:谁参加,谈什么
  • 黄仕忠丨戏曲文献研究之回顾与展望
  • 京东美团饿了么等外卖平台被约谈
  • 中拉论坛部长级会议为何悬挂海地和圣卢西亚的国旗?外交部回应