一、今日刷题
1. 第七部分:二叉树 – 617. 合并二叉树
给你两棵二叉树: root1 和 root2 。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
答案代码:
做题时想到递归了,基本思路也有,但是把代码写复杂了,想的是构建递归函数,并引入一颗新树作为返回结果,但总解决不了空指针的问题。
参考题解的代码,发现和判断对称树有点像,但空指针问题解决起来更容易。
package BinaryTree;
/**
* @author: LYZ
* @date: 2022/3/4 19:22
* @description: 617. 合并二叉树 给你两棵二叉树: root1 和 root2 。
*
* 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。
* 合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
* 返回合并后的二叉树。
* 注意: 合并过程必须从两个树的根节点开始。
*/
public class MergeTrees {
public static void main(String[] args) {
TreeNode root1 = new TreeNode(1, new TreeNode(2), new TreeNode(3));
TreeNode root2 = new TreeNode(2, new TreeNode(3), new TreeNode(4));
MergeTrees m = new MergeTrees();
TreeNode ans = m.mergeTrees(root1, root2);
System.out.println(ans);
}
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if (root1 == null) {
return root2;
}
if (root2 == null) {
return root1;
}
root1.val += root2.val;
root1.left = mergeTrees(root1.left, root2.left);
root1.right = mergeTrees(root1.right, root2.right);
return root1;
}
}