617. Merge Two Binary Trees

LeetCode の挑戦ログ

Problem

https://leetcode.com/problems/merge-two-binary-trees/

  • 2つのバイナリツリーを同階層でマージしたツリーを作る

Solution

/**
 * 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);
    }

    private TreeNode merge(TreeNode t1, TreeNode t2) {
        if (t1 == null && t2 == null) {
            return null;
        }

        int mergedVal = (t1 == null ? 0 : t1.val) + (t2 == null ? 0 : t2.val);
        TreeNode merged = new TreeNode(mergedVal);

        merged.left = merge(
                (t1 == null ? null : t1.left),
                (t2 == null ? null : t2.left)
        );
        merged.right = merge(
                (t1 == null ? null : t1.right),
                (t2 == null ? null : t2.right)
        );

        return merged;
    }
}

Impressions

  • 再帰処理はかなり頭を使わないと書けない
  • null チェックが美しさに欠ける(がどうすればいいものか)