Leetcode 617. 合并二叉树

116 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

今天写了二叉树的中序遍历,所以打算把热题100中关于二叉树的题,都解一遍,方便大家专项学习

一、题目描述

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

二、思路分析

  • 合并二叉树,我们可以用递归来解题

  • 首先合并两个数的根节点

  • 再依次将左子树和右子树分别当作根节点进行合并

  • 最后返回即可

三、AC 代码:

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        //边界条件,一棵树为空直接返回另一棵树
        if(root1 == null){
            return root2;
        }
        if(root2 == null){
            return root1;
        }
        //根节点先合并
        TreeNode merged = new TreeNode(root1.val + root2.val);
        //递归左子树,并挂在根节点左边
        merged.left = mergeTrees(root1.left, root2.left);
        //递归右子树,并挂在根节点右边
        merged.right = mergeTrees(root1.right, root2.right);
        //返回根节点
        return merged;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 递归调用

    • 将子树依次合并

    • 最后合在一起返回

最后这个算法是Leetcode的第617题,是热题100里的题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!