重温算法之二叉树中的列表

简介: 对于二叉树的题目很多就是涉及到遍历二叉树的,针对其一般使用的方法有枚举,深度优先搜索以及双向DFS,当然其难度系数就有点高了,遇到难得题目可以暂时跳过,不然一直解不出来也打击信心。

微信截图_20220531173728.png


一.题目介绍


1.题目来源


链接:LeetCode


2.题目


给你一棵以 root 为根的二叉树和一个 head 为第一个节点的链表。 如果在二叉树中,存

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

微信截图_20220531201651.png

微信截图_20220531201738.png


二.具体实现


1.实现思路


可以利用二叉树和链表子节点和父节点结构相同的特性可以采用递归来解决这个问题,先判断当前节点,然后往左子树遍历,再往右子树遍历,当所有的节点都遍历完而且链表遍历完则返回true,如果其中之一没有同步走完(遍历完)则返回false,表示其不符合条件,而当其两者的值相同时,继续看,左边和右边有一个满足条件。


2.实现代码


1)自己的实现方式

public boolean isSubPath(ListNode head, TreeNode root) {
    if (head == null) {
        return true;
    }
    if (root == null) {
        return false;
    }
    //先判断当前的节点,如果不对,再看左子树和右子树
    return isSub(head, root) || isSubPath(head, root.left) || isSubPath(head, root.right);
}
private boolean isSub(ListNode head, TreeNode node) {
    //特判:链表走完了,返回true
    if (head == null) {
        return true;
    }
    //特判:链表没走完,树走完了,这肯定不行,返回false
    if (node != null) {
        return false;
    }
    //如果值不同,必定不是
    if (head.val != node.val) {
        return false;
    }
    //如果值相同,继续看,左边和右边有一个满足即可
    return isSub(head.next, node.left) || isSub(head.next, node.right);
}
复制代码


2)题友的实现方式


每一次寻找过程我们都需要将链表中的每一个元素和树中元素,向下配对,这既是内层DFS 一次成功的匹配被定义为 当前链表元素为空(匹配完了) 一次失败的匹配被定义为 树节点为空 或 当前链表元素值与当前树节点元素值不相等 注意到我们只需要一次成功的匹配即可返回true

微信截图_20220531201811.png


3.运行结果

微信截图_20220531201835.png

微信截图_20220531201911.png


三.题后思考


对于二叉树的题目很多就是涉及到遍历二叉树的,针对其一般使用的方法有枚举,深度优先搜索以及双向DFS,当然其难度系数就有点高了,遇到难得题目可以暂时跳过,不然一直解不出来也打击信心。

目录
相关文章
|
2月前
|
存储 算法
【数据结构与算法】二叉树基础OJ--下(巩固提高)
【数据结构与算法】二叉树基础OJ--下(巩固提高)
|
1月前
|
算法
【算法与数据结构】二叉树(前中后)序遍历1
【算法与数据结构】二叉树(前中后)序遍历
|
1月前
|
算法
【算法与数据结构】二叉树(前中后)序遍历2
【算法与数据结构】二叉树(前中后)序遍历
|
1月前
|
算法
算法系列--递归(2)--二叉树专题(上)
算法系列--递归(2)--二叉树专题
24 0
|
27天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
1月前
|
算法
算法系列--递归(2)--二叉树专题(下)
算法系列--递归(2)--二叉树专题(下)
20 0
|
1月前
|
算法 索引
【算法与数据结构】深入二叉树实现超详解(全源码优化)
【算法与数据结构】深入二叉树实现超详解(全源码优化)
|
1月前
|
存储 算法
【算法与数据结构】深入解析二叉树(二)之堆结构实现
【算法与数据结构】深入解析二叉树(二)之堆结构实现
|
2月前
|
存储 算法 Python
数据结构与算法——二叉树介绍(附代码)
数据结构与算法——二叉树介绍(附代码)
22 3
|
2月前
|
存储 算法
【数据结构与算法】二叉树基础OJ -- 上 (巩固提高)-2
【数据结构与算法】二叉树基础OJ -- 上 (巩固提高)-2