二元樹中的鍊錶
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 で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
- GitHub
以上是二元樹中的鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

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

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。
