617. Merge Two Binary Trees

617. Merge Two Binary Trees

一、題目

You are given two binary trees root1 and root2.

Imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge the two trees into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of the new tree.

Return the merged tree.

Note: The merging process must start from the root nodes of both trees.

 

Example 1:

 

 

 

 

 

Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7] Output: [3,4,5,5,4,null,7]

Example 2:

Input: root1 = [1], root2 = [1,2] Output: [2,2]

 

Constraints:

  • The number of nodes in both trees is in the range [0, 2000].
  • -104 <= Node.val <= 104

 

二、程式作法

 /*寫法一*/
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left;
 *     public TreeNode right;
 *     public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
public class Solution
{
    public TreeNode MergeTrees(TreeNode root1, TreeNode root2)
    {
        if (root1 == null && root2 == null)
            return null;

        return Merge(root1, root2);
    }

    public TreeNode Merge(TreeNode root1, TreeNode root2)
    {
        if (root1 == null)
            return root2;
        else if (root2 == null)
            return root1;

        TreeNode res = new TreeNode();
        res.val = root1.val + root2.val;
        res.left = Merge(root1.left, root2.left);
        res.right = Merge(root1.right, root2.right);
        return res;
    }
}

/*寫法二*/
/*
public class Solution
{
    public TreeNode MergeTrees(TreeNode root1, TreeNode root2)
    {
        if (root1 == null && root2 == null)
            return null;

        TreeNode result = new TreeNode();

        result.val = ((root1 == null) ? 0 : root1.val) + ((root2 == null) ? 0 : root2.val);

        result.left = (root1?.left == null && root2?.left == null) ? null : MergeTrees(root1?.left, root2?.left);

        result.right = (root1?.right == null && root2?.right == null) ? null : MergeTrees(root1?.right, root2?.right);

        return result;
    }
}
*/

 

三、思路筆記

目的為將兩顆樹的相同結構節點的數值做相加,成新的一顆樹。

每次對這兩顆樹的節點同步取值,將相加後的值,也同步長一顆新的樹出來。