首页 > 其他分享 >617. 合并二叉树

617. 合并二叉树

时间:2024-11-15 19:57:18浏览次数:1  
标签:right TreeNode nullptr 合并 617 二叉树 new root1 left

  1. 题目链接

  2. 解题思路

    • 分情况讨论即可
      • 两个头都是空,直接返回空
      • 若root1为空,直接返回root2
      • 若roo2为空,直接返回root1
      • 若都不空,则二者相加,得到一个新节点A,然后二者的左子树去合并,得到一个新左子树new_left,二者的右子树去合并,得到一个新右子树new_right,然后新节点的左儿子就是new_left,右儿子就是new_right
  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) {
            if (root1 == nullptr && root2 == nullptr) {
                return nullptr;
            }
            if (root1 == nullptr) {
                return root2;
            }
            if (root2 == nullptr) {
                return root1;
            }
            root1->val += root2->val;
            TreeNode *new_left = mergeTrees(root1->left, root2->left);
            TreeNode *new_right = mergeTrees(root1->right, root2->right);
            root1->left = new_left;
            root1->right = new_right;
            return root1;
        }
    };
    
  4. 对于这类递归题目,「小白」容易陷入到微观当中,对于这种情况,可以做「回溯类」题目,然后画出递归执行的过程。等熟悉到一定程度后,就只需要在「宏观」角度思考问题了。比如这个题,我只需要思考,某个节点应该怎么做,然后它的左儿子,同样执行递归,就可以得到结果,那么我再拿到这个结果,就是最终的结果了。

标签:right,TreeNode,nullptr,合并,617,二叉树,new,root1,left
From: https://www.cnblogs.com/ouyangxx/p/18548567

相关文章

  • 104. 二叉树的最大深度
    题目链接解题思路普通的递归可能很简单,但是,现在要求,使用「二叉树递归套路」来思考问题每个节点需要什么信息?如果根节点,能够有一个「最大深度」的信息,那么直接返回就可以了。那么,这个信息可以通过左子树信息+右子树信息得到吗?max(左子树最大深度,右子树最大深度)+1......
  • 102. 二叉树的层序遍历
    题目链接解题思路层序遍历就是用队列,本题需要一层一层收集答案,所以我们可以用一个变量cur,表示该层还剩多少节点需要收集,同时,遇到一个节点,还要将其孩子节点放入队尾。那么我们怎么知道下一层的节点个数,所以还需要一个变量next,记录下一层的节点个数。总结一遍:每次从队头......
  • LeetCode654.最大二叉树
    LeetCode刷题记录文章目录......
  • PHP实现两张图片的合并
    要求首先要确认GD库是否安装,若未安装则需要去先安装GD库后再进行操作有两个方法可快速检查是否安装GD库:1、在PHP脚本中用 phpinfo() 来查看配置信息2、在命令行中执行php-m命令来查看是否有此模块效果这里做了个简单的页面方便看合并的效果代码页面代码如下<!DO......
  • 树上启发式合并学习笔记+杂题
    图论系列:前言:欲买桂花同载酒,终不似,少年游。相关题单:戳我一.树上启发式合并前置知识:树的重儿子。1.引入启发式算法是基于人类的经验和直观感觉,对一些算法的优化。(其实就是感觉是对的就是对的),例如并查集的启发式合并,将小集合合并到大集合中。因为在路径压缩的时候,大集合的根......
  • 数据结构 ——— 利用前序序列重建链式二叉树
    目录题目要求链式二叉树示意图​编辑代码实现 题目要求读入用户输入的一串前序遍历的字符串,根据此字符串建立一个链式二叉树例如前序遍历的字符串为:ABC##DE#G##F###;其中"#"表示空树链式二叉树示意图以此图的链式二叉树为例子那么此链式二叉树前序遍历转换为字符......
  • 力扣—543.二叉树的直径
    543.二叉树的直径给你一棵二叉树的根节点,返回该树的 直径 。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之间边数表示。示例1:输入:root=[1,2,3,4,5]输出:3解释:3,取......
  • 将labelme生成的label和img合并展示
    img:label:合并达到的效果:实现代码:点击查看代码importcv2importnumpyasnpfromPILimportImagedefadd_legend(image,colors,labels,alpha=1):"""在图像的右上角添加图例,使用固定的尺寸。:paramimage:输入的BGR图像。:paramcolors:颜色......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......
  • 使用 PowerShell 创建多个 .reg 文件进行分段(切片)并且能够在执行时按顺序合并并执行,我
    使用PowerShell创建多个.reg文件进行分段(切片)并且能够在执行时按顺序合并并执行,我们可以按照以下步骤进行:目标:将一个大的 .reg 文件分割成多个小文件。每个小文件(分段)都将是一个有效的 .reg 文件,可以独立执行。使用PowerShell自动生成这些分段 .reg 文件,并执行它......