【力扣题解】P617-合并二叉树-Java题解

发布时间:2023年12月30日

花无缺

👨?💻博客主页:@花无缺
欢迎 点赞👍 收藏? 留言📝 加关注?!
本文由 花无缺 原创

收录于专栏 【力扣题解】



【力扣题解】P617-合并二叉树-Java题解

P617.合并二叉树

🌏题目描述

给你两棵二叉树: root1root2

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

返回合并后的二叉树。

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

示例 1:

在这里插入图片描述

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

提示:

  • 两棵树中的节点数目在范围 [0, 2000]
  • -104 <= Node.val <= 104

💡题解

public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
    // root1 为空, 就返回 root2
    if (root1 == null) {
        return root2;
    }
    // root2 为空, 就返回 root1
    if (root2 == null) {
        return root1;
    }
    // 如果两个节点都不为空, 那么就新建第三棵树
    TreeNode root = new TreeNode();
    // 新树的节点值等于 root1 和 root2 对应的节点值之和
    root.val = root1.val + root2.val;
    // 递归获取新树的左子节点
    root.left = mergeTrees(root1.left, root2.left);
    // 递归获取新树的右子节点
    root.right = mergeTrees(root1.right, root2.right);
    // 返回新树
    return root;
}

时间复杂度:O(n),n 为合并后的树的节点数。

🌏总结

这道题就是分别判断 root1 和 root2 在当前节点是否有值,如果其中一个为空,那么合并后的树的节点就是另一个不空的树的节点,如果两个都不空,那么合并后的树的节点就是两个树的节点值之和,然后再递归的获取合并后的树的左子树和右子树。

作者:花无缺(huawuque404.com)


🌸欢迎关注我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
🍻一起进步-刷题专栏:【力扣题解】
🥇往期精彩好文:
📢【CSS选择器全解指南】
📢【HTML万字详解】
你们的点赞👍 收藏? 留言📝 关注?
是我持续创作,输出优质内容的最大动力!
谢谢!

文章来源:https://blog.csdn.net/huawuque404/article/details/135307277
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。