二叉树: 判断子树

#! /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

  

 

posted @ 2020-07-09 18:17  Adamanter  阅读(254)  评论(0)    收藏  举报