当前位置: 首页 > news >正文

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

小黑代码

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

在这里插入图片描述

小黑生活

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

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

第一次做抗原,阴性

在这里插入图片描述

寒风中去运动啦

在这里插入图片描述

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

在这里插入图片描述

公司的生活

在这里插入图片描述

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

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

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

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

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

跟逗兄晚上约个巴西烤肉

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

去买个咖啡搓个澡

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

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

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

第二天抗原果然阳性

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

我的牛逼同事

在这里插入图片描述

在胡同里康复的两天

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

回来一测,变成弱阳了

在这里插入图片描述

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

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

遇到的奇葩招聘

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

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

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

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

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

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

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

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

在这里插入图片描述

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

在这里插入图片描述

相关文章:

  • 数据库原理及MySQL应用 | 日志管理
  • web前端经典react面试题
  • web靶场搭建之帝国cms7.5
  • Spring Boot学习篇(一)
  • RosonQt140——Qt Charts模块介绍和Qt绘制图表
  • 正交编码器溢出处理
  • 机器学习——05线性回归
  • IIC信号为什么要加上拉电阻
  • Tippecanoe安装使用
  • 免费分享一个SSM商城管理系统,很漂亮的
  • 蓝桥杯基础算法(一)—— 快速排序
  • 关于进程的几个问题
  • 【Flink实时数仓】数据仓库项目实战 《四》日志数据分流 【DWD】
  • 直线检测霍夫变换VS深度学习
  • pm2管理已部署上线的项目
  • [数据结构]链表的实现在PHP中
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CAP理论的例子讲解
  • CSS中外联样式表代表的含义
  • Cumulo 的 ClojureScript 模块已经成型
  • DataBase in Android
  • ES6系统学习----从Apollo Client看解构赋值
  • Java Agent 学习笔记
  • js 实现textarea输入字数提示
  • Markdown 语法简单说明
  • Python进阶细节
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 从零开始在ubuntu上搭建node开发环境
  • 分类模型——Logistics Regression
  • 构造函数(constructor)与原型链(prototype)关系
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何使用 JavaScript 解析 URL
  • 入手阿里云新服务器的部署NODE
  • 事件委托的小应用
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • scrapy中间件源码分析及常用中间件大全
  • 国内开源镜像站点
  • 说说我为什么看好Spring Cloud Alibaba
  • #NOIP 2014#Day.2 T3 解方程
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (16)Reactor的测试——响应式Spring的道法术器
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (C语言)fgets与fputs函数详解
  • (二)斐波那契Fabonacci函数
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (转)大型网站架构演变和知识体系
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net 中viewstate的原理和使用
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET单元测试
  • .考试倒计时43天!来提分啦!