【Java题解】617. 合并二叉树

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL
的节点将直接作为新二叉树的节点。

示例 1:

【Java题解】617. 合并二叉树_第1张图片

注意: 合并必须从两个树的根节点开始。

方法:
二叉树,使用递归。

代码:

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        // 递归
        if (root1 == null) return root2;
        if (root2 == null) return root1;

        TreeNode node = new TreeNode(root1.val + root2.val);

        node.left = mergeTrees(root1.left, root2.left);
        node.right = mergeTrees(root1.right, root2.right);

        return node;
    }
}

时间复杂度:O(min(m, n)) 遍历的二叉树节点的个数不会超过两个二叉树中,节点数较小的。因为重合的要合并,如果一棵树的一个节点有值,但是另一棵树的这个节点是null,那么就不会继续访问有值的节点了。
空间复杂度:O(min(m,n)) m,n是二叉树的节点数。递归深度与高度最小的树有关。最坏情况下, 二叉树的高度就是节点数。

补充:当然也可以在原来的树上操作。

你可能感兴趣的:(力扣,java,数据结构,算法)