PigyChan_LeetCode 1367. 二叉树中的列表

1367. 二叉树中的列表

难度中等

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

示例 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

思路1.0:

类匹配二叉树的套路
两层遍历,一层在树中寻找与链表的根值相同的节点,一层判断从上一部找到的节点是否和链表匹配。
第二层的遍历顺序:树,Tnode->left or Tnode->right, 链表 node->node.next
第二层子列表成立的判断条件:
1)值相等
2)listNULL , true;
3)list!=NULL && Tnode
NULL, false

代码1.0(已完成):
  class Solution {
  public:
      bool isMatching(ListNode* LNode, TreeNode* TNode)
      {
          if (LNode == NULL) return true;
          if (LNode != NULL && TNode == NULL) return false;


          return (LNode->val == TNode->val) && (isMatching(LNode->next, TNode->left) || isMatching(LNode->next, TNode->right));
      }


      bool isSubPath(ListNode* head, TreeNode* root) {
          if (head == NULL || root == NULL) return false;
          return isMatching(head, root) || (isSubPath(head, root->left) || isSubPath(head, root->right));
      }
  };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值