👨?💻博客主页:@花无缺
欢迎 点赞👍 收藏? 留言📝 加关注?!
本文由 花无缺 原创收录于专栏 【力扣题解】
给你两棵二叉树: root1
和 root2
。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 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 在当前节点是否有值,如果其中一个为空,那么合并后的树的节点就是另一个不空的树的节点,如果两个都不空,那么合并后的树的节点就是两个树的节点值之和,然后再递归的获取合并后的树的左子树和右子树。
🌸欢迎
关注
我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
🍻一起进步-刷题专栏:【力扣题解】
🥇往期精彩好文:
📢【CSS选择器全解指南】
📢【HTML万字详解】
你们的点赞👍 收藏? 留言📝 关注?
是我持续创作,输出优质内容
的最大动力!
谢谢!