【跟Leon一起刷LeetCode】617. Merge Two Binary Trees

本文介绍了一种合并两棵二叉树的方法。当两棵树的节点重叠时,新树的节点值等于两节点值之和;若仅一棵树有节点,则该节点成为新树的节点。文章提供了一个递归解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Merge Two Binary Trees

Description:

Given two binary trees and 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 them 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 new tree.

Example 1:
Input: 
    Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
Output: 
Merged tree:
         3
        / \
       4   5
      / \   \ 
     5   4   7
Note:

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

问题描述:

给定两棵树,将两棵树合并成一颗树。

合并规则:如果两个节点重叠,将这两个点的值相加,作为合并后新节点的值。否则,非空的节点将被用作新树的节点。

Solution:

合并两个二叉树想到同步遍历,对于相同位置上的一对结点n1和n2,处理策略是:
若n1和n2都存在,则只需要保留其中一个结点(如n1),将另一结点的值加到此结点上即可(如n1.val += n2.val)。
若n1或n2任一为NULL,则合并后的二叉树对应位置上的结点就是非空的那个。
若n1和n2都为NULL,则合并后节点为NULL。

因为涉及到结点的更新,所以用递归会是一个简单而又方便的方法。

/**
 * 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) {
        if (t1 == null) return t2;
        if (t2 == null) return t1;
        TreeNode result = new TreeNode(t1.val + t2.val);
        result.left = mergeTrees(t1.left, t2.left);
        result.right = mergeTrees(t1.right, t2.right);
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值