#! /usr/bin/env python
# -*- coding: utf-8 -*-
# __author__ = "Victor"
# Date: 2020/7/8
# 假定s是大的树,判断t是否为s的子树, 输入isSubTree(s, t)
# 主要思路, 递归判断问题
# Definition for a binary tree node.
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def isSubTree(self, s, t):
"""
#用于判断的主函数,递归得遍历s的每一个结点,并将其作为新的根节点,再与t进行比较
#使用or相连,即其中只要有一个s的子树与t相同,则返回True
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
if not s or not t:
return False
return self.isEqual(s,t) or self.isSubtree(s.left,t) or self.isSubtree(s.right,t)
def isEqual(self,S,T):
"""
以S为根节点,判断S和T是否相等, 递归实现
如果两棵树的左边=左边, 右边=右边, 两个条件都符合
:param S:
:param T:
:return:
"""
if not S and not T:
return True
if S and T:
if S.val==T.val:
return self.isEqual(S.left,T.left) and self.isEqual(S.right,T.right)
else:
return False
else:
return False