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

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

目录
相关文章
|
9天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
41 5
|
2月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
2月前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
66 5
|
2月前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
49 0
|
3月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
32 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
3月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
39 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
3月前
|
存储 算法
【二叉树】—— 算法题
【二叉树】—— 算法题
【二叉树】—— 算法题
|
3月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
35 0
|
5月前
|
算法
【初阶数据结构篇】二叉树算法题
二叉树是否对称,即左右子树是否对称.
34 0
|
5月前
|
存储 算法 Java
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
85 0

热门文章

最新文章