• 【刷题笔记9.25】LeetCode:合并二叉树


    LeetCode:合并二叉树

    一、题目描述

    给你两棵二叉树: root1 和 root2 。
    想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

    返回合并后的二叉树。

    注意: 合并过程必须从两个树的根节点开始。
    在这里插入图片描述

    二、分析

    通过 深度优先遍历(递归方式)
    可以使用深度优先搜索合并两个二叉树。从根节点开始同时遍历两个二叉树,并将对应的节点进行合并。

    两个二叉树的对应节点可能存在以下三种情况,对于每种情况使用不同的合并方式。

    • 如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;
    • 如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;
    • 如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两个节点。

    对一个节点进行合并之后,还要对该节点的左右子树分别进行合并。这是一个递归的过程。

    三、上代码

    /**
     * 题目:合并二叉树(递归)
     */
    public class Deal5 {
        public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
            //如果 root1 == null, 则返回 root2
            if (root1 == null) {
                return root2;
            }
    
            //如果 root2 == null, 则返回 root1
            if (root2 == null) {
                return root1;
            }
    
            //当root1和root2都不为null时,创建TreeNode result,用于返回新的结果
            TreeNode result = new TreeNode(root1.val + root2.val);
    
            result.left = mergeTrees(root1.left, root2.left);
            result.right = mergeTrees(root1.right, root2.right);
            return result;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    JMeter笔记3 | JMeter安装和环境说明
    CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http
    基于SpringBoot和PostGIS的世界各国邻国可视化实践
    C复习-指针
    [Unity][VR]Oculus透视开发图文教程1-Passthrough应用XR项目设置
    使用try-catch捕捉异常和不捕捉异常的区别
    Dubbo-Activate实现原理
    Python3语言详解
    c++ 模板 指针类型偏特化
    《数据结构、算法与应用C++语言描述》-栈的应用-离线等价类问题
  • 原文地址:https://blog.csdn.net/weixin_43950588/article/details/133257105