1. 程式人生 > 實用技巧 >LeetCode 617 合併二叉樹

LeetCode 617 合併二叉樹

LeetCode 617 合併二叉樹

問題描述:
給定兩個二叉樹,想象當你將它們中的一個覆蓋到另一個上時,兩個二叉樹的一些節點便會重疊。
你需要將他們合併為一個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為NULL 的節點將直接作為新二叉樹的節點。

遞迴

執行用時:1 ms, 在所有 Java 提交中擊敗了63.92%的使用者
記憶體消耗:39.1 MB, 在所有 Java 提交中擊敗了36.56%的使用者

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        return merge(t1, t2);
    }
    //在root1上合併
    public TreeNode merge(TreeNode root1, TreeNode root2) {
        if(root1==null && root2==null) {
            //都為null則返回null
            return null;
        }
        else if(root1==null && root2!=null) {
            //root1=null則新建子樹
            root1 = new TreeNode(root2.val);
        }
        else if(root1!=null) {
            //root1!=null則合併root2的節點值
            root1.val += root2==null? 0:root2.val;
        }
        //合併左子樹、右子樹
        TreeNode leftRoot1 = merge(root1.left, root2==null? null: root2.left);
        TreeNode rightRoot1 = merge(root1.right, root2==null? null: root2.right);
        //合併新節點
        root1.left = leftRoot1;
        root1.right = rightRoot1;

        return root1;
    }
}