题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#下面两个函数,hassubTree是判断两棵树是否有空树,如果有空树,则没有必要比了
#第二个函数is_subtree,是判断A,B是否是子树了,根节点相同
class Solution:
def HasSubtree(self, pRoot1, pRoot2):
# write code here
if not pRoot1 or not pRoot2:
#当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false
return False
return self.is_subtree(pRoot1, pRoot2) or self.HasSubtree(pRoot1.left, pRoot2) or self.HasSubtree(pRoot1.right, pRoot2)
#第一项是判断此时是否可以作为起点判断,第二项和第三项是判断左右子树是不是可以进行判断
def is_subtree(self, A, B):
if not B:
#如何B为空,则B已经对比完了,而前面都是相等的,因此全部判断完返回True
return True
if not A or A.val != B.val:
#如果A为空,则找遍了A也没有找到相等的起点,如果A与B的值不同
return False
return self.is_subtree(A.left,B.left) and self.is_subtree(A.right, B.right)
#第一项和第二项是判断左子树和右子树是不是相等,就这样从AB的起点,一步一步判断