863. All Nodes Distance K in Binary Tree
題目網址:https://leetcode.cn/problems/all-nodes-distance-k-in-binary-tree/
題意:給一 BT 的
root
, 和一目標點target
, 以及一整數k
。返回所有距離目標點
target
為k
的 node, 可以用任何順序返回。tree 中每個
node.val
都不同。
Solution:
想法:利用 DFS + BFS
- 先用 DFS 建立無向圖
- 再以
target
為中心向外做 BFSe.g.
target = 5
,k = 2
- 以
5
為中心, 首先取出 3, 6, 2- 然後 3 會取出 5, 1
- 依此類推…
這邊必須小心, 因為我們建立的是無向圖, child 的 adj list 中是會有 parent 的
以上面的為例, 3 向外擴散取出 5 跟 1。其中 1 是答案, 但 5 不是
因此, 得用一個visited
來記錄拜訪過的 node
- 若已經在
visited
裡則跳過- 否則, 將其加入
visited
中這樣一來, 5 最一開始就會被加入到
visited
中
就算後面的 node 有跟 5 相鄰, 也不會把 5 加入到 res 中
class Solution { |
- time:$O(n)$ ➔ 每個 node 皆被遍歷常數次
- space:$O(n)$ ➔ 撇除要返回的
res
, 在 while loop 迭代的過程中,q
的元素個數不超過n
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論