小黑被劝退了,生活学习依然继续的leetcode之旅:572. 另一棵树的子树

Source

小黑代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
        self.match_sub = False
        # 匹配函数
        def match(node,sub_node):
            # 全部为空
            if not (node or sub_node):
                return True
            # 有一个为空
            if (node==None) ^ (sub_node==None):
                return False
            # val不相等
            if node.val != sub_node.val:
                return False
            match_left = match(node.left,sub_node.left)
            match_right = match(node.right,sub_node.right)
            return match_left and match_right

        def dfs(node):
            if (not node) or self.match_sub:
                return
            if match(node,subRoot):
                self.match_sub = True
            dfs(node.left)
            dfs(node.right)
        dfs(root)
        return self.match_sub

在这里插入图片描述

KMP匹配法

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
        # 树和子树的特殊先序遍历
        pre_root = []
        pre_subRoot = []
        # 获取先序遍历
        def dfs(node, arr):
            if not node:
                arr.append('#')
                return
            arr.append(node.val)
            dfs(node.left, arr)
            dfs(node.right, arr)
        # kmp匹配算法
        def kmp(patt, string):
            # 生成next数组
            i = 1
            next_ = [0]
            prefix_len = 0
            while i < len(patt):
                if patt[i]==patt[prefix_len]:
                    i += 1
                    prefix_len += 1
                    next_.append(prefix_len)
                else:
                    if not prefix_len:
                        next_.append(0)
                        i += 1
                    else:
                        prefix_len = next_[prefix_len-1]
            # 开始匹配
            i = 0
            j = 0
            while i < len(string):
                if string[i]==patt[j]:
                    i += 1
                    j += 1
                else:
                    if not j:
                        i += 1
                    else:
                        j = next_[j-1]
                if j == len(patt):
                    return True
            return False
                    

        # 执行函数,获取先序遍历
        dfs(root, pre_root)
        dfs(subRoot, pre_subRoot)
        
        return kmp(pre_subRoot, pre_root)

在这里插入图片描述

小黑生活

还是收到了奇安信的感谢信,骂声一片

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一次做抗原,阴性

在这里插入图片描述

寒风中去运动啦

在这里插入图片描述

自己洗的衣服,晾在暖气上

在这里插入图片描述

公司的生活

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

去吃黑色星期四,竟然不让堂食

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小黑不知不觉最后一次去公司

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
公司发的抗原啦
在这里插入图片描述

跟逗兄晚上约个巴西烤肉

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

去买个咖啡搓个澡

在这里插入图片描述
在这里插入图片描述

去拔了罐,经过可怕的发热门诊

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二天抗原果然阳性

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我的牛逼同事

在这里插入图片描述

在胡同里康复的两天

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

回来一测,变成弱阳了

在这里插入图片描述

按摩享受生活,得知自己被劝退

在这里插入图片描述
在这里插入图片描述

遇到的奇葩招聘

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

电影卡里还剩那么一点点,赶紧去看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小黑宿舍沦陷了,去门口飞速吃了个串,但是吃不出味道

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

约了好久不见的在新华社实习的黑山羊学姐出去转转,聊了聊天,感觉心中被带来了些阳光

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到了之前学钢琴的地方关门了,心里有些说不出的滋味

在这里插入图片描述

看着小黑驴发的这条朋友圈,自己也感到十分心痛,默默祈祷着,希望大家都能够相安无事。小黑这两个月逐渐开始感觉到了生活的残酷,家里人能够健健康康真的是一种奢侈,但愿人长久,大家都能快快乐乐的。不辜负在身旁的每一天~

在这里插入图片描述