BST 中第K小的元素 | Medium | LeetCode#230. Kth Smallest Element in a BST
題目敘述
- 題目難度:
Medium
- 題目敘述:給定一個 Binary Search Tree 的
root
,以及一個整數k
,回傳第 $k^{th}$ 小的節點值
解法
這題是刷題到目前下來解最快的一題,從打開題目到最後 Accept 大概花 15 分鐘,其中包含 5 分鐘在local端手動寫測試
一開始的想法
題目要求回傳 第 K 個最小的節點值,所以想法很簡單,首先 BST 的由左至右的大小排序跟你對樹進行 In-Order Traversal 的順序會一致,因此當你進行 In-Order Traversal 第一個拜訪的節點就會是最小值,接著拜訪到的就是 BST 中第二小的節點,依序下去…。 因此只要透過一個 counter 來計算現在是否第K個節點就好,如果找到就回傳節點值。
我的解法
1 | /** |
這裡除了題目給的 kthSmallest
函數之外額外宣告了一個 dfs
來進行節點走訪,另外有宣告一個 count
來記錄當前是第幾個節點, result
負責儲存回傳結果。 在節點拜訪過程中只要 count == k
就將節點值保存在 result
當中
其實這時候就可以 return 了,沒必要走訪完整棵樹
執行結果
複雜度
時間複雜度
$O(N)$,$N$ 為節點總數
空間複雜度
$O(H)$,$H$ 為樹高,最壞狀況下會為 $O(N)$,而平衡樹的狀況下會是 $O(LogN)$
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Kevin Liu's 部落格 || Technical || Travel!
評論