Leetcode1367.二叉树中的列表

给定一个二叉树和一个链表,如果二叉树中存在一条路径,其节点值与链表节点值一一对应,返回True,否则返回False。描述了两种解题思路:迭代法和深度优先搜索递归法。
摘要由CSDN通过智能技术生成

1367:二叉树中的列表

题目

给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。
如果在二叉树中,存在一条一直向下的路径,且每个点的数值恰好一一对应以 head 为首的链表中每个节点的值,那么请你返回 True ,否则返回 False 。
一直向下的路径的意思是:从树中某个节点开始,一直连续向下的路径。

示例 1:
示例1

输入:head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
输出:true
解释:树中蓝色的节点构成了与链表对应的子路径。

示例 2:
在这里插入图片描述

输入:head = [1,4,2,6], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
输出:true

示例 3:

输入:head = [1,4,2,6,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null,1,3]
输出:false
解释:二叉树中不存在一一对应链表的路径。

提示:

  • 二叉树和链表中的每个节点的值都满足 1 <= node.val <= 100 。
  • 链表包含的节点数目在 1 到 100 之间。
  • 二叉树包含的节点数目在 1 到 2500 之间。

思路一

根据题目可知要在二叉树中判断是否存在与链表相等的路径,最简单的办法就是循环遍历。循环遍历可以采用迭代法。

  1. 首先判断特殊情况:一是链表是否为空,返回true;二是二叉树是否为空,返回false(也是第二个递归函数isSubPath的终止条件);
  2. 其次判断第一个结点是否相等:
  • 相等(或关系):
    • 调用第一个递归函数isSubPathRecur,再依次判断在左右子树是否存在与head.next相等的结点;
    • 调用第二个递归函数isSubPath,判断左右子树中是否存在与head相等的结点;
  • 不相等:调用第二个递归函数isSubPath,判断左右子树中是否存在与head相等的结点;
  1. 在调用第一个递归函数isSubPathRecur时,递归的终止条件同1;此时已经至少存在一个结点相等,再判断该递归函数传入参数的第一个结点值是否相等:
  • 相等,存在两种情况:左子树与链表下一个结点是否相等;右子树与链表下一个结点是否相等;
  • 不相等:则这条路径二者不相等,返回false
class Solution {
   
    public boolean isSubPath(ListNode head, TreeNode root) {
   
        //Step1:判断特殊情况
        if(head == null) return true;
        if(root == null) return false;

        //Step2:递归调用
        if(head.val == root.val){
   //分为四种情况
            return isSubPathRecur(head.next, root.left) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值