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