↓快轉到主要內容
  1. LeetCode/

LeetCode 2385: Amount of Time for Binary Tree to Be Infected

·1 分鐘· ·
LeetCode Medium Hash-Table Tree Depth-First-Search Breadth-First-Search Binary-Tree
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2026-11-01

  • 提交紀錄:Accepted(一次通過)

解題思路
#

感染會往小孩和父節點擴散,所以和 LC 863 一樣先把樹轉成無向圖(Tree 模板五),再從 start 做 BFS。每一層是一分鐘,最後一層被感染的時間就是答案,等於 BFS 的層數減一。

也就是說,答案是 start 到最遠節點的距離。

我的嘗試
#

一次通過。

正確解法
#

class Solution:
    def amountOfTime(self, root: Optional[TreeNode], start: int) -> int:
        graph = defaultdict(list)
        queue = deque([root])
        while queue:
            node = queue.popleft()
            for child in (node.left, node.right):
                if child:
                    graph[node.val].append(child.val)
                    graph[child.val].append(node.val)
                    queue.append(child)

        minutes = -1
        seen = {start}
        queue = deque([start])
        while queue:
            minutes += 1
            for _ in range(len(queue)):
                node = queue.popleft()
                for nei in graph[node]:
                    if nei not in seen:
                        seen.add(nei)
                        queue.append(nei)
        return minutes

建圖用 BFS 而不是遞迴 DFS,樹很深(最多 10^5 個節點)時不會碰到遞迴深度限制。

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • minutes 從 -1 開始:第一層是 start 自己,時間是 0。
  • 不建圖、只往下找,會漏掉往父節點的方向。

面試口說整理
#

感染會往父節點擴散,所以我先把樹轉成無向圖,再從 start 做 BFS,一層算一分鐘,最後一層的時間就是答案,也就是 start 到最遠節點的距離。建圖用 BFS 避免遞迴太深。時間、空間 O(n)。

相關文章

LeetCode 863: All Nodes Distance K in Binary Tree
·1 分鐘
LeetCode Medium Hash-Table Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 863 解題筆記:先把樹轉成無向圖(補上往父節點的邊),再從 target BFS 走 k 步
LeetCode 314: Binary Tree Vertical Order Traversal
·1 分鐘
LeetCode Medium Hash-Table Tree Depth-First-Search Breadth-First-Search Sorting Binary-Tree
LeetCode 314 解題筆記:BFS 帶著欄位編號,用 BFS 才能保證同一欄由上到下、同一列由左到右
LeetCode 652: Find Duplicate Subtrees
·1 分鐘
LeetCode Medium Hash-Table Tree Depth-First-Search Binary-Tree
LeetCode 652 解題筆記:後序把每棵子樹編碼,出現第二次時加入答案;字串編碼最差 O(n^2),改成 (值, 左 id, 右 id) 編號可到 O(n)
LeetCode 449: Serialize and Deserialize BST
·1 分鐘
LeetCode Medium String Tree Depth-First-Search Breadth-First-Search Design Binary-Search-Tree Binary-Tree
LeetCode 449 解題筆記:BST 只要存前序,不用空節點標記;反序列化帶著上下界遞迴,O(n)
LeetCode 515: Find Largest Value in Each Tree Row
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 515 解題筆記:BFS 層序遍歷,每層取最大值;初始值用 -inf
LeetCode 117: Populating Next Right Pointers in Each Node II
·1 分鐘
LeetCode Medium Linked-List Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 117 解題筆記:BFS 一層一層接 next;不是完全二元樹時,只看隔壁節點的小孩會斷掉