leetcode - 617. Merge Two Binary Trees【双树遍历 + null 模拟遍历 + 结点复用】

题目

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.

题意

给定两个二叉树,将其中一个放到另一个上面,两个树种一些结点是重叠的,另外一些则不是。

你需要将他们合并成一个新的二叉树。合并的规则:

  • 如果两个节点重叠,那么在生成的树种,相应结点的值为二者的和。
  • 否则,非空结点将作为新树的结点。


分析及解答

public class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {

    	TreeNode result = null ;//复用以往的结点
        if(t1 == null && t2 == null){
            //1.待处理的两个结点都为空,则返回空。
        	return null;
        }else if(t1 != null && t2 != null){
            //2.待处理2结点,都不为空,则求和并生成新结点。(此处复用了结点t1)
        	result = t1;
        	result.val = t1.val + t2.val;
        	result.left = mergeTrees(t1.left, t2.left);//一致处理左孩子,确保结构上的一致性。
        	result.right = mergeTrees(t1.right, t2.right);
        }else if(t1 != null){
            //3.t1不为空,而t2为空。t1可继续往深处遍历,而t2不再可以,通过null值来模拟t2继续往下遍历。
        	result = t1;
        	result.left = mergeTrees(t1.left, null);
        	result.right = mergeTrees(t1.right, null);
        }else{
        	result = t2;
        	result.left = mergeTrees(null, t2.left);
        	result.right = mergeTrees(null, t2.right);
        }
    	return result;
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值