Python程序员面试算法宝典---解题总结: 第三章 二叉树 3.5 如何判断两棵二叉树是否相等

# -*- 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()

猜你喜欢

转载自blog.csdn.net/qingyuanluofeng/article/details/91472610