LeetCode #230 Kth Smallest Element in a BST - 刷題之旅
1 題目描述
在二元搜尋樹中,找到第 k
小的節點值。
2 解法
看到二元搜尋樹就要知道,中序遍歷的結果就是一個排序好的陣列。因此我們可以透過中序遍歷的方式,來找到第 k
小的節點值。也就是先 left - root - right 的方式遍歷,當我們遍歷到第 k
個節點時,就可以回傳。大概可以這樣思考:
- 我們先走到底,也就是一直往左走,直到走到最左邊的節點。
- 當觸底的時候,我們開始計數,每次遍歷到一個節點,就把
count
+1。 - 當
count
與k
相等時,就回傳當前節點的值。 - 否則,遍歷右邊的節點。
那我們開始來一步步拆解這個問題吧!
Step 1 我們先走到底
1 | def inorder(root): |
Step 2 當觸底的時候,我們開始計數
1 | def inorder(root): |
Step 3 當 count
與 k
相等時,找到第k
的最小值。
1 | def inorder(root): |
到這裡幾乎就完成一大半了,但是上面的程式碼只有遍歷到最左邊的節點,我們還需要遍歷右邊的節點。因此我們可以透過遞歸的方式,來遍歷右邊的節點。
Step 4 遍歷右邊節點
1 | def inorder(root): |
這樣就完成了!!完整的程式碼如下
1 | class Solution: |
2.2 使用迭代的方式
這裡我們可以使用迭代的方式來解這個問題,也就是使用stack來模擬遞歸的方式。而概念也是一樣
- 先走到底最左邊
- 開始計數
- 當
count
與k
相等時,就回傳當前節點的值 - 否則,遍歷右邊的節點
1 | class Solution: |
3 結語
這題不難,但是我也是笨笨的思路沒有想清楚,腦子第一個反應應該是要出現我要先走到最底層,然後開始計數的程式邏輯不夠清晰。
1 | def mostLeft(root): |
1 | def mostLeft(root): |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Shannon's Blog 🐟 技術 | 生活 | 旅行! 如果你覺得我的文章有幫助,希望你可以到我的 github 給我一個 star ⭐️ Shannon Blog Repo
評論