leetcode算法题--树的子结构

news/2024/7/20 22:11:35 标签: 算法, leetcode, 深度优先

原题链接:https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof/description/?envType=study-plan-v2&envId=coding-interviews

是一个dfs的题目,但是一开始的方法写的有点麻烦

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSubStructure(A *TreeNode, B *TreeNode) bool {
    if B == nil {
        return false
    }

    var dfs func(node1 *TreeNode, node2 *TreeNode) bool 
    dfs = func(node1 *TreeNode, node2 *TreeNode) bool {
        if node2 == nil {
           return true 
        } 
        
        if node1 == nil {
            return false
        }

        flag1, flag2 := false, false
        if node1.Val == node2.Val {
            flag1 = dfs(node1.Left, node2.Left) && dfs(node1.Right, node2.Right)
        }
        flag2 = dfs(node1.Left, B) || dfs(node1.Right, B)
        return flag1 || flag2
    }
    return dfs(A, B)
}

优化,这种会涉及到“从头开始”的题目,应该要想到调用原函数

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isSubStructure(A *TreeNode, B *TreeNode) bool {
    var dfs func(node1 *TreeNode, node2 *TreeNode) bool 
    dfs = func(node1 *TreeNode, node2 *TreeNode) bool {
        if node2 == nil {
           return true 
        } 
        
        if node1 == nil {
            return false
        }

        return (node1.Val == node2.Val) && dfs(node1.Left, node2.Left) && dfs(node1.Right, node2.Right)
    }
    return (A != nil && B!= nil) && (dfs(A, B) || isSubStructure(A.Left, B) || isSubStructure(A.Right, B))
}

http://www.niftyadmin.cn/n/4995764.html

相关文章

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以直…

tomcat使用不同jdk的解决方法

1,修改bin文件夹下面的catalina.bat文件,把如下内容 rem ----- Execute The Requested Command --------------------------------------- echo Using CATALINA_BASE: %CATALINA_BASE% echo Using CATALINA_HOME: %CATALINA_HOME% echo Using CAT…

信创环境 Phytium S2500 虚拟机最大内存规格测试

在 ARM 架构中,"IPA" 通常指的是 "Instruction Set Architecture"(指令集架构),arm环境的虚拟机支持的最大内存规格与母机上内存多少无关,由arm本身的ipa size决定,ipa size 可以理解为虚拟机的物理地址空间,kernel5.4.32中ipa默认是44bits(16T si…

希尔贝壳入选“北京市人工智能大模型高质量数据集发布(第二批)”合作企业

8月28日,2023中国国际服务贸易交易会通用人工智能算力论坛在石景山区举办。论坛上,北京市人工智能大模型高质量数据集(第二批)发布,其中包含北京希尔贝壳科技有限公司的“大模型方言口语语音数据集”和“智能会议场景高…

SpringMVC常用的三种获取请求参数的方式

在Spring MVC中,可以使用多种方式来获取请求参数。下面我将介绍常用的几种方式,并提供相关的示例代码。 1. 使用RequestParam注解获取请求参数 RequestParam注解用于从请求中获取指定名称的参数值,并将其绑定到方法参数上。如果请求中没有找…

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉财经图书馆

2023开学礼《乡村振兴战略下传统村落文化旅游设计》许少辉财经图书馆

RT-Thread 中断管理学习(一)

中断管理 什么是中断?简单的解释就是系统正在处理某一个正常事件,忽然被另一个需要马上处理的紧急事件打断,系统转而处理这个紧急事件,待处理完毕,再恢复运行刚才被打断的事件。生活中,我们经常会遇到这样…

数据工厂-生成接口通用用例

章节目录: 一、背景介绍二、前置准备三、设计思路四、代码具体实现五、执行效果六、其他说明七、结束语 一、背景介绍 有哪些用例是可以通用且固定的? 针对之前提到的接口用例设计思路,拆分为三个切入点: 举个例子: {…