二叉树--合并两颗二叉树

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、解答:两个结点的值相加而已,再递归的调用即可。

3、C++代码

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if(t1 && t2){
            TreeNode *root = new TreeNode(t1->val + t2->val);
            root->left = mergeTrees(t1->left,t2->left);
            root->right = mergeTrees(t1->right,t2->right);
            return root;
        }else{
            return t1?t1:t2;
        }
    }
};

python代码:

class Solution:
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        if t1 and t2:
            root = TreeNode(t1.val+t2.val)
            root.left = self.mergeTrees(t1.left,t2.left)
            root.right = self.mergeTrees(t1.right,t2.right)
            return root
        else:
            return t1 or t2

可以采用递归的方式实现二叉树合并。具体的合并规则如下: 1. 如果两个二叉树都为空,则返回空。 2. 如果其中一个二叉树为空,则返回另一个二叉树。 3. 如果两个二叉树都不为空,则将它们的根节点的值相加,并创建一个新节点作为合并后的根节点。 4. 递归地对左子树进行合并,将左子树的根节点作为新节点的左子节点。 5. 递归地对右子树进行合并,将右子树的根节点作为新节点的右子节点。 代码实现如下: ```python class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None def mergeTrees(t1: TreeNode, t2: TreeNode) -> TreeNode: if not t1 and not t2: return None if not t1: return t2 if not t2: return t1 root = TreeNode(t1.val + t2.val) root.left = mergeTrees(t1.left, t2.left) root.right = mergeTrees(t1.right, t2.right) return root ``` 在这个代码中,我们定义了一个 TreeNode 类来表示二叉树的节点。mergeTrees 函数接收两个二叉树的根节点 t1 和 t2 作为参数,并返回合并后的二叉树的根节点。 在函数的第一行,我们首先判断两个二叉树是否都为空。如果是,则返回空。 接着,我们判断其中一个二叉树是否为空。如果是,则返回另一个二叉树。 最后,如果两个二叉树都不为空,我们创建一个新节点作为合并后的根节点,并将它们的值相加。然后递归地对左子树和右子树进行合并,并将它们分别作为新节点的左子节点和右子节点。最后返回新节点作为合并后的二叉树的根节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值