二叉树中的链表
1367。二叉树中的链表
难度:中等
主题:链表、树、深度优先搜索、广度优先搜索、二叉树
给定一个二叉树根和一个以头为第一个节点的链表。
如果链表中从头开始的所有元素都对应于二叉树中连接的向下路径,则返回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
- 解释: 二叉树中没有路径包含从 head 开始的链表的所有元素。
约束:
- 树中的节点数将在 [1, 2500] 范围内。
- 列表中的节点数量将在 [1, 100] 范围内。
- 1
提示:
- 给定链表中的指针和二叉树中的任何节点,创建递归函数。检查链表中从头开始的所有元素是否对应二叉树中的某个向下路径。
解决方案:
我们需要递归地检查链表是否可以匹配二叉树中的向下路径。我们将使用深度优先搜索 (DFS) 来探索二叉树,并尝试匹配从头到叶节点的链表。
我们可以采取以下解决方案:
步骤:
- 匹配链表的递归函数:创建一个接受链表节点和树节点的辅助函数。该函数检查从当前节点开始的链表是否与二叉树中的向下路径匹配。
- 通过树进行DFS:使用DFS遍历二叉树,并在每个节点处检查是否存在从该节点开始的匹配。
- 基本条件:如果链表已完全遍历,则递归应停止并返回 true,如果二叉树节点为 null 或值不匹配,则返回 false。
- 在每个节点开始搜索:在每个树节点开始匹配检查,以找到链表的潜在起点。
让我们用 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 ?>
解释:
-
isSubPath($head, $root):
- 该函数递归地检查从 $head 开始的链表是否对应于树中的任何向下路径。
- 它首先检查当前根节点是否是列表的开头(通过调用 dfs)。
- 如果没有,则递归搜索左右子树。
-
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中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

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

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

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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

Switchcanbeslightlyfasterthanif-elsewhencomparingasinglevariableagainstmultiplescalarvalues,especiallywithmanycasesorcontiguousintegersduetopossiblejumptableoptimization;2.If-elseisevaluatedsequentiallyandbettersuitedforcomplexconditionsinvolvingdiff

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