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

花无缺

‍博客主页:@花无缺
欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 花无缺 原创

收录于专栏 【力扣题解】


文章目录

  • 【力扣题解】P617-合并二叉树-Java题解
    • 题目描述
    • 题解
    • 总结


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

P617.合并二叉树

题目描述

给你两棵二叉树: root1root2

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

返回合并后的二叉树。

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

示例 1:

【力扣题解】P617-合并二叉树-Java题解_第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万字详解】
你们的点赞 收藏⭐ 留言 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

你可能感兴趣的:(力扣题解,leetcode,java,算法,数据结构)