1367年。バイナリツリーのリンクリスト
難易度: 中
トピック: リンクリスト、ツリー、深さ優先検索、幅優先検索、バイナリツリー
バイナリ ツリーのルートと、最初のノードとして head を持つリンク リストが与えられます。
先頭から始まるリンクリスト内のすべての要素がバイナリツリーで接続されている下向きのパスに対応する場合は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 中国語 Web サイトの他の関連記事を参照してください。