# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.5 如何判断两棵二叉树是否相等
题目:
两棵二叉树相等是指这两棵二叉树有相同的结构,并且在相同位置上的节点有相同的值。
如何判断两棵二叉树是否相等?
分析:
用递归来做
关键:
1 用递归来做
注意判断两个结点的值是否相等
参考:
Python程序员面试算法宝典
'''
class BinaryTreeNode(object):
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def buildTree(data):
if not data:
return
nodes = list()
for value in data:
node = BinaryTreeNode(value)
nodes.append(node)
length = len(data)
for i in range(length / 2):
node = nodes[i]
if not node:
continue
if 2 * i + 1 < length:
node.left = nodes[2 * i + 1]
if 2 * i + 2 < length:
node.right = nodes[2 * i + 2]
return nodes[0]
def isSameTree(root1, root2):
if root1 is None and root2 is None:
return True
elif root1 is None:
return False
elif root2 is None:
return False
if root1.data != root2.data:
return False
leftFlag = isSameTree(root1.left, root2.left)
if not leftFlag:
return False
rightFlag = isSameTree(root1.right, root2.right)
return rightFlag
def process():
data = list(range(1, 8))
root1 = buildTree(data)
root2 = buildTree(data)
result = isSameTree(root1, root2)
assert result == True
data = list(range(1, 9))
root2 = buildTree(data)
result = isSameTree(root1, root2)
assert result == False
root1 = None
result = isSameTree(root1, root2)
assert result == False
root2 = None
result = isSameTree(root1, root2)
assert result == True
if __name__ == "__main__":
process()
Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.5 如何判断两棵二叉树是否相等
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/91472610
今日推荐
周排行