【Leetcode】617. Merge Two Binary Trees(Easy)

1.题目

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.

提示:合并过程必须从两棵树的根结点开始。

2.思路

从根节点开始,两棵树对应着先序遍历,将t1树进行更新,作为要返回的结果。

①两个树对应位置的节点都空,则返回空;

②一个节点空,一个节点不空,返回非空的节点;

③两个节点都不空,更新该节点的值(两节点数据域的和),更新其左子树,右子树。(递归)

3.算法
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if(t1==null&&t2==null)return null;
        if(t1!=null&&t2==null)return t1;
        if(t1==null&&t2!=null)return t2;
        
        t1.val+=t2.val;
        t1.left=mergeTrees(t1.left,t2.left);
        t1.right=mergeTrees(t1.right,t2.right);
        return t1;    
    }    
}
4.总结

开始的时候,这两句,只写了两个mergeTrees操作,忘记把返回结果赋值给t1了(也就是树断了)。

t1.left=mergeTrees(t1.left,t2.left);
t1.right=mergeTrees(t1.right,t2.right);
写成了

mergeTrees(t1.left,t2.left);
mergeTrees(t1.right,t2.right);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值