LeetCode617. 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.

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

【题目】对两个二叉树进行节点上的求和,生成新的二叉树,节点值为null则相当于为0;考察的就是二叉树的遍历,遍历每个结点然后如果重叠(两个二叉树结点都不为空)新结点值便为两者和,不重叠(只有一个结点为空)新结点值为不为空的值,全为空则返回为空跳出。按照这个逻辑进行迭代。
【解】
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#默认定义一个节点,节点值,节点左叶子,节点右叶子

#定义merge的类,t1\t2为树节点
class Solution(object):
    def mergeTrees(self, t1, t2):
        """
        :type t1: TreeNode
        :type t2: TreeNode
        :rtype: TreeNode
        """
        if t1 is None and t2 is None:
            return 
        elif t1 is None and t2 is not None:
            return t2
        elif t1 is not None and t2 is None:
            return t1
        else:
            t1.val+=t2.val
            #mergeTrees()的内容为值进行相加

  	    #左右叶子节点的值进行相加
            t1.left = self.mergeTrees(t1.left,t2.left)   
            t1.right = self.mergeTrees(t1.right,t2.right)
        return t1
【结果】
Your input
[1,3,2,5] [2,1,3,null,4,null,7]
Your answer
[3,4,5,5,4,null,7]
Expected answer
[3,4,5,5,4,null,7]

二叉树的遍历:前序遍历、中序遍历、后续遍历
感觉二叉树的遍历就是一个递归的过程,叶子节点的值需要调用根节点的值来表达;另外定义节点的传入参数也很重要,影响到调用的形式。
#创建节点类
class Node(object):
def __init__(self, value,left,right):
self.value=value
self.left=left
self.right=right

def  preTraverse(node):
if node=null: 
return
print node.value
preTraverse(node.left)
preTraverse(node.right)
return node

def midTraverse(node):
if node=null: 
return
midTraverse(node.left)
print node.value
midTraverse(node.right)
return node

def afterTraverse(node):
if node=null:
return
afterTraverse(node.left)
afterTraverse(node.right)
print node.value
return node

#调用示例:
if __name__=='__main__':  
root=Node('D',Node('B',Node('A'),Node('C')),Node('E',right=Node('G',Node('F'))))  
print('前序遍历:')  
preTraverse(root)  
print('\n')  
print('中序遍历:')  
midTraverse(root)  
print('\n')  
print('后序遍历:')  
afterTraverse(root)  
print('\n')  
#结果
前序遍历:  
DBACEGF  
  
中序遍历:  
ABCDEFG  
  
后序遍历:  
ACBFGED  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值