1367。二叉树中的链表
难度:中等
主题:链表、树、深度优先搜索、广度优先搜索、二叉树
给定一个二叉树根和一个以头为第一个节点的链表。
如果链表中从头开始的所有元素都对应于二叉树中连接的向下路径,则返回True,否则返回False。
在此上下文中,向下路径是指从某个节点开始并向下的路径。
示例1:
示例2:
示例 3:
约束:
提示:
解决方案:
我们需要递归地检查链表是否可以匹配二叉树中的向下路径。我们将使用深度优先搜索 (DFS) 来探索二叉树,并尝试匹配从头到叶节点的链表。
我们可以采取以下解决方案:
让我们用 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):
dfs($head, $root):
对于输入 head = [4,2,8] 和 root = [1,4,4,null,2,2,null,1,null,6,8],算法将:
该解决方案使用 DFS 有效地检查二叉树中的子路径。
联系链接
이 시리즈가 도움이 되었다면 GitHub에서 저장소에 별표를 표시하거나 즐겨찾는 소셜 네트워크에서 게시물을 공유해 보세요. 여러분의 지원은 저에게 큰 의미가 될 것입니다!
이런 유용한 콘텐츠를 더 원하시면 저를 팔로우해주세요.
以上是二叉树中的链表的详细内容。更多信息请关注PHP中文网其他相关文章!