zoukankan      html  css  js  c++  java
  • LeetCode 1367. 二叉树中的列表

    1. 二叉树中的列表

    给你一棵以 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

    示例 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 之间。
    
    
    ## 思路
    这个题有点类似Ac自动机。。。,当链表匹配到不适配的位置时, 此时链表需要回到第一个结点在树的位置, 一开始的设计, 想的是直接把链表的头节点保留, 然后重新用链表头节点与接下来不是配的树结点进行比较,这样会导致一个问题,前面适配成功的点与接下未匹配的点可能构成链表的值,从而得到结果。
    ## 代码
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
        bool dfs(ListNode *head, TreeNode* root, ListNode *temp) {
            if(head == nullptr || root == nullptr) return false;
            else if(head->val != root->val) return dfs(temp, root->left, temp) || dfs(temp, root->right, temp);
            else{
                if(head->next == nullptr) return true;
                return dfs(head->next, root->left, temp) || dfs(head->next, root->right, temp);  
            }
        }
    public:
        bool isSubPath(ListNode* head, TreeNode* root) {
            return dfs(head, root, head);
        }
    };
    
  • 相关阅读:
    OnEraseBkgnd、OnPaint与画面重绘
    .编译ADO类DLL时报错的解决方案
    VC列表框样式
    Codeforces 131D. Subway 寻找环树的最短路径
    Codeforces 103B. Cthulhu 寻找奈亚子
    Codeforces 246D. Colorful Graph
    Codeforces 278C. Learning Languages 图的遍历
    Codeforces 217A. Ice Skating 搜索
    Codeforces 107A. Dorm Water Supply 搜图
    Codeforces 263 D. Cycle in Graph 环
  • 原文地址:https://www.cnblogs.com/csyxdh/p/12452627.html
Copyright © 2011-2022 走看看