LeetCode617. Merge Two Binary Trees

来源:互联网 发布:怎么学软件 编辑:程序博客网 时间:2024/05/20 04:14
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=valueself.left=leftself.right=rightdef  preTraverse(node):if node=null: returnprint node.valuepreTraverse(node.left)preTraverse(node.right)return nodedef midTraverse(node):if node=null: returnmidTraverse(node.left)print node.valuemidTraverse(node.right)return nodedef afterTraverse(node):if node=null:returnafterTraverse(node.left)afterTraverse(node.right)print node.valuereturn 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  
原创粉丝点击