首页 后端开发 php教程 二叉树中的链表

二叉树中的链表

Sep 07, 2024 pm 06:30 PM

1367。二叉树中的链表

难度:中等

主题:链表、树、深度优先搜索、广度优先搜索、二叉树

给定一个二叉树根和一个以头为第一个节点的链表。

如果链表中从头开始的所有元素都对应于二叉树中连接的向下路径,则返回True,否则返回False

在此上下文中,向下路径是指从某个节点开始并向下的路径。

示例1:

Linked List in Binary Tree

  • 输入: head = [4,2,8], root = [1,4,4,null,2,2,null,1,null,6,8,null,null,null,null ,1,3]
  • 输出: true
  • 说明:蓝色节点构成二叉树中的子路径。

示例2:

Linked List in Binary Tree

  • 输入: 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
  • 解释: 二叉树中没有路径包含从 head 开始的链表的所有元素。

约束:

  • 树中的节点数将在 [1, 2500] 范围内。
  • 列表中的节点数量将在 [1, 100] 范围内。
  • 1

提示:

  1. 给定链表中的指针和二叉树中的任何节点,创建递归函数。检查链表中从头开始的所有元素是否对应二叉树中的某个向下路径。

解决方案:

我们需要递归地检查链表是否可以匹配二叉树中的向下路径。我们将使用深度优先搜索 (DFS) 来探索二叉树,并尝试匹配从头到叶节点的链表。

我们可以采取以下解决方案:

步骤:

  1. 匹配链表的递归函数:创建一个接受链表节点和树节点的辅助函数。该函数检查从当前节点开始的链表是否与二叉树中的向下路径匹配。
  2. 通过树进行DFS:使用DFS遍历二叉树,并在每个节点处检查是否存在从该节点开始的匹配。
  3. 基本条件:如果链表已完全遍历,则递归应停止并返回 true,如果二叉树节点为 null 或值不匹配,则返回 false。
  4. 在每个节点开始搜索:在每个树节点开始匹配检查,以找到链表的潜在起点。

让我们用 PHP 实现这个解决方案:1367。二叉树中的链表

<?php
// Definition for a singly-linked list node.
class ListNode {
    public $val = 0;
    public $next = null;
    function __construct($val = 0, $next = null) {
        $this->val = $val;
        $this->next = $next;
    }
}

// Definition for a binary tree node.
class TreeNode {
    public $val = 0;
    public $left = null;
    public $right = null;
    function __construct($val = 0, $left = null, $right = null) {
        $this->val = $val;
        $this->left = $left;
        $this->right = $right;
    }
}

class Solution {

    /**
     * @param ListNode $head
     * @param TreeNode $root
     * @return Boolean
     */
    function isSubPath($head, $root) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }

    // Helper function to match the linked list starting from the current tree node.
    function dfs($head, $root) {
       ...
       ...
       ...
       /**
        * go to ./solution.php
        */
    }
}

// Example usage:

// Linked List: 4 -> 2 -> 8
$head = new ListNode(4);
$head->next = new ListNode(2);
$head->next->next = new ListNode(8);

// Binary Tree:
//      1
//     / \
//    4   4
//     \   \
//      2   2
//     / \ / \
//    1  6 8  8
$root = new TreeNode(1);
$root->left = new TreeNode(4);
$root->right = new TreeNode(4);
$root->left->right = new TreeNode(2);
$root->right->left = new TreeNode(2);
$root->left->right->left = new TreeNode(1);
$root->left->right->right = new TreeNode(6);
$root->right->left->right = new TreeNode(8);
$root->right->left->right = new TreeNode(8);

$solution = new Solution();
$result = $solution->isSubPath($head, $root);
echo $result ? "true" : "false"; // Output: true
?>

解释:

  1. isSubPath($head, $root):

    • 该函数递归地检查从 $head 开始的链表是否对应于树中的任何向下路径。
    • 它首先检查当前根节点是否是列表的开头(通过调用 dfs)。
    • 如果没有,则递归搜索左右子树。
  2. dfs($head, $root):

    • 此辅助函数检查链表是否与从当前树节点开始的树匹配。
    • 如果列表被完全遍历($head === null),则返回true。
    • 如果树节点为空或者值不匹配,则返回 false。
    • 否则,继续检查左右子节点。

执行示例:

对于输入 head = [4,2,8] 和 root = [1,4,4,null,2,2,null,1,null,6,8],算法将:

  • 从根节点(节点1)开始,匹配失败。
  • 移动到左子节点(节点4),匹配4,然后向下移动并匹配2,然后匹配8,返回true。

复杂:

  • 时间复杂度:O(N * min(L, H)),其中N是二叉树的节点数,L是链表的长度,H是二叉树的高度树。
  • 空间复杂度:由于二叉树的递归深度,O(H)。

该解决方案使用 DFS 有效地检查二叉树中的子路径。

联系链接

이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!

이런 유용한 콘텐츠를 더 원하시면 저를 팔로우해주세요.

  • 링크드인
  • 깃허브

以上是二叉树中的链表的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

PHP教程
1600
276
处理加密货币计算:为什么BCMATH在PHP中至关重要 处理加密货币计算:为什么BCMATH在PHP中至关重要 Aug 01, 2025 am 07:48 AM

bcmathisesene forAccratecryptoCurrencyCalcalsionSinphpBecausefloing-pointarithmeticIntroducesunAcceptablebablerOundingErrors.1.floation-pointnumberslike0.1 0.2yieldimimpreciseresults(e.g.,e.g.,0.30000000000000000000004)

字符串作为价值对象:一种现代的特定领域字符串类型的方法 字符串作为价值对象:一种现代的特定领域字符串类型的方法 Aug 01, 2025 am 07:48 AM

Rawstringsindomain-drivenapplicationsshouldbereplacedwithvalueobjectstopreventbugsandimprovetypesafety;1.Usingrawstringsleadstoprimitiveobsession,whereinterchangeablestringtypescancausesubtlebugslikeargumentswapping;2.ValueobjectssuchasEmailAddressen

使用PHP进行数据刮擦和Web自动化 使用PHP进行数据刮擦和Web自动化 Aug 01, 2025 am 07:45 AM

使用guazzleforbusthttprequestswithheadersand andtimeouts.2.parsehtmleffitedlywithsymfonydomcrawlerusingcssselectors.3.handlejavascript-heavysitesby-heavysitesbyintegrationpuppeepetementegratingpuppeeteviaphpage()

php 8的'匹配”表达式:``if-elseif''链的优越替代品 php 8的'匹配”表达式:``if-elseif''链的优越替代品 Aug 02, 2025 pm 02:47 PM

match表达式在PHP8中提供更简洁、安全的替代方案,相比if-elseif和switch,它自动进行严格比较(===),避免类型松散比较的错误;2.match是表达式,可直接返回值,适用于赋值和函数返回,提升代码简洁性;3.match始终使用严格类型检查,防止整数、布尔值与字符串间意外匹配;4.支持单臂多值匹配(如0,false,''),但复杂条件(如范围判断)仍需if-elseif;因此,当进行单一变量的精确值映射时应优先使用match,而复杂逻辑则保留if-elseif。

通过上下文魔术常数增强您的错误记录策略 通过上下文魔术常数增强您的错误记录策略 Aug 01, 2025 am 07:47 AM

Contextualmagicconstantsarenamed,meaningfulidentifiersthatprovideclearcontextinerrorlogs,suchasUSER_LOGIN_ATTEMPTorPAYMENT_PROCESSING.2.Theyimprovedebuggingbyreplacingvagueerrormessageswithspecific,searchablecontext,enablingfasterrootcauseidentificat

WordPress 自定义文章类型按钮弹出表单与 AJAX 提交教程 WordPress 自定义文章类型按钮弹出表单与 AJAX 提交教程 Aug 08, 2025 pm 11:09 PM

本教程详细指导如何在 WordPress 中为自定义文章类型列表的每个文章添加一个“提交报价”按钮,点击后弹出包含文章ID的自定义HTML表单,并实现表单数据的AJAX提交及成功消息显示。内容涵盖前端jQuery UI弹窗设置、动态数据传递、AJAX请求处理,以及后端WordPress AJAX钩子和数据处理的PHP实现,确保功能完整、安全且用户体验良好。

解开性能:关于PHP开关与IF-Else的真相 解开性能:关于PHP开关与IF-Else的真相 Aug 02, 2025 pm 04:34 PM

Switchcanbeslightlyfasterthanif-elsewhencomparingasinglevariableagainstmultiplescalarvalues,especiallywithmanycasesorcontiguousintegersduetopossiblejumptableoptimization;2.If-elseisevaluatedsequentiallyandbettersuitedforcomplexconditionsinvolvingdiff

如何使用PHP中的阵列 如何使用PHP中的阵列 Aug 20, 2025 pm 07:01 PM

phparrayshandledatAcollectionsefefityIndexedorassociativuctures; hearecreatedWithArray()或[],访问decessedviakeys,modifybyAssignment,iteratifybyAssign,iteratedwithforeach,andManipulationUsfunsionsFunctionsLikeCountLikeCountLikeCountLikeCountLikecount()

See all articles