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;
    }
}
posted @ 2020-09-21 13:30  CodeSPA  阅读(81)  评论(0编辑  收藏  举报