leetcode 617.Merge Two Binary Trees

本文深入探讨了二叉树合并算法,通过递归方式实现两棵二叉树的节点值相加,形成新的二叉树。具体步骤包括:节点值叠加、递归处理子树及非空节点保留。代码示例清晰展示了算法实现过程。

题目:

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.

题意:

合并两棵二叉树

解题思路:

递归:

同时递归遍历两棵树,

若同时为空,则返回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 || t2 == null){
            return t1==null?t2:t1;
        }
        t1.left = mergeTrees(t1.left,t2.left);                   
        t1.right = mergeTrees(t1.right,t2.right);
        t1.val = t1.val + t2.val;
        return t1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值