617. 合并二叉树
给你两棵二叉树: 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]
思考
同时遍历两颗子树
这题最烦的就是空指针问题,得判断左右孩子存在不存在真是麻了
我觉得如果我在原树上修改就可以提高效率= =,算了懒得写了,偷个懒。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public static TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root1==null&&root2==null) return null;
int root1val=0;
int root2val=0;
if(root1!=null) root1val=root1.val;
if(root2!=null) root2val=root2.val;
TreeNode root = new TreeNode(root1val+root2val);
ToATree(root, root1,root2);
return root;
}
private static void ToATree(TreeNode root, TreeNode root1, TreeNode root2) {
if(root1==null&&root2==null) return;
int root1left = 0;
int root1right = 0;
int root2left = 0;
int root2right = 0;
if(root1!=null){
if (root1.left!=null) root1left = 1;
if(root1.right!=null) root1right = 1;
}
if(root2!=null){
if (root2.left!=null) root2left = 1;
if(root2.right!=null) root2right = 1;
}
// 构建左子树
if(root1left==1&&root2left==1){
root.left = new TreeNode(root1.left.val+root2.left.val);
ToATree(root.left,root1.left,root2.left);
}
else if(root1left==0&&root2left==1) {
root.left = new TreeNode(root2.left.val);
ToATree(root.left,null,root2.left);
}
else if(root1left==1&&root2left==0) {
root.left = new TreeNode(root1.left.val);
ToATree(root.left,root1.left,null);
}
// 构建右子树
if(root1right==1&&root2right==1){
root.right = new TreeNode(root1.right.val+root2.right.val);
ToATree(root.right,root1.right,root2.right);
}
else if(root1right==0&&root2right==1) {
root.right = new TreeNode(root2.right.val);
ToATree(root.right,null,root2.right);
}
else if(root1right==1&&root2right==0) {
root.right = new TreeNode(root1.right.val);
ToATree(root.right,root1.right,null);
}
}
}