【LeetCode刷题-树】--1367.二叉树中的链表

1367.二叉树中的链表

image-20231119221701290

方法:枚举

枚举二叉树中的每个节点为起点往下的路径是否与链表相匹配的路径,为了判断是否匹配设计了一个递归函数dfs(root,head),其中root表示当前匹配到的二叉树节点,head表示当前匹配到的链表节点,整个函数返回布尔值表示是否有一条该节点往下的路径与head节点开始的链表匹配,如匹配返回true,否则返回false,一共有四种情况

  • 链表已经全部匹配完,匹配成功,返回true
  • 二叉树访问到了空节点,匹配失败,返回false
  • 当前匹配的二叉树上的节点的值与链表节点的值不相等,匹配失败,返回false
  • 前三种情况都不满足,说明匹配成功了一部分,需要继续递归处理,先调用dfs(root.left,head.next),如果返回结果是false,说明没有匹配的路径,需要继续在右子树中匹配,继续递归调用函数

接下来就是枚举,从根节点开始,如果当前匹配成功就直接返回true,否则继续找它的左儿子和右儿子是否满足

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSubPath(ListNode head, TreeNode root) {if(root == null) return false;return dfs(head,root) || isSubPath(head,root.left) || isSubPath(head,root.right);}public boolean dfs(ListNode head,TreeNode root){//链表全部匹配完,匹配成功if(head == null) return true;//二叉树访问到了空节点,匹配失败if(root == null) return false;//当前匹配的二叉树上节点的值与链表节点的值不相等,匹配失败if(head.val != root.val) return false;return dfs(head.next,root.left) || dfs(head.next,root.right);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/195409.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第7天:信息打点-资产泄漏amp;CMS识别amp;Git监控amp;SVNamp;DS_Storeamp;备份

第7天:信息打点-资产泄漏&CMS识别&Git监控&SVN&DS_Store&备份 知识点: 一、cms指纹识别获取方式 网上开源的程序,得到名字就可以搜索直接获取到源码。 cms在线识别: CMS识别:https://www.yun…

【机器学习】划分训练集和测试集的方法

在机器学习中,我们的模型建立完成后,通常要根据评估指标来对模型进行评估,以此来判断模型的可用性。而评估指标主要的目的是让模型在未知数据上的预测能力最好。因此,我们在模型训练之前,要对训练集和测试集进行划分。…

每天一道算法题(六)——返回一组数字中所有和为 0 且不重复的三元组

文章目录 前言1、问题2、示例3、解决方法4、效果5、注意点 前言 注意:答案中不可以包含重复的三元组。 1、问题 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] n…

Transformer中位置嵌入的几种形式对比

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

git rebase 和 git merge的区别?以及你对它们的理解?

文章目录 前言是什么分析区别后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:git操作相关 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢…

【开发流程】持续集成、持续交付、持续部署

一、开发工作流程 假设把开发流程分为以下几个阶段: 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 如上图所示,持续集成、持续交付、持续部署有着不同的软件自动交付周期。 二、持续集成、持续交付、持续部署 1、持续集成 持续集成…

git基本用法和操作

文章目录 创建版本库方式:Git常用操作命令:远程仓库相关命令分支(branch)操作相关命令版本(tag)操作相关命令子模块(submodule)相关操作命令忽略一些文件、文件夹不提交其他常用命令 创建版本库方式: 创建文件夹 在目录下 右键 Git Bush H…

Lesson 04 模板入门

C:渴望力量吗,少年? 文章目录 一、泛型编程1. 引入2. 函数模板(1)函数模板概念(2)函数模板格式(3)函数模板的原理(4)函数模板的实例化&#xff08…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

Linux管道的工作过程

常用的匿名管道(Anonymous Pipes),也即将多个命令串起来的竖线。管道的创建,需要通过下面这个系统调用。 int pipe(int fd[2]) 我们创建了一个管道 pipe,返回了两个文件描述符,这表示管道的两端&#xff…

什么是tomcat, tomcat该如何使用?(java)

tomcat是什么? tomcat翻译过来为汤姆猫, 但是他可不是猫和老鼠中的汤姆, 而是java中的tom, 虽然java中的tomcat没有猫和老鼠那么出名, 但是他仍然是java中的中流砥柱 下图为java中的tomcat, 也就是最右边这个黄色的猫: Tomcat是Apache 软件基金会(Apache Software …

异常语法详解

异常语法详解 一:异常的分类:二:异常的处理1:异常的抛出:throw2:异常的声明:throws3:try-catch捕获并处理异常 三:finally关键字四:自定义异常类: 一:异常的分类&#xf…