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

LeetCode 230: Kth Smallest Element in a BST

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

基本資料
#

難易度: medium 第一次嘗試:2022-10-29

  • 提交紀錄:Runtime Error → Wrong Answer ×2 → Accepted ×5 → Wrong Answer ×3 → Accepted ×2

解題思路
#

BST 的中序遍歷會由小到大輸出(Tree 模板三)。用迭代的中序(同 LC 94),每彈出一個節點就把 k 減 1,減到 0 就是答案,不用走完整棵樹。

我的嘗試
#

一版回傳的是節點本身而不是值;之後重寫時有幾版回傳了 None。

正確解法
#

class Solution:
    def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
        stack, cur = [], root
        while True:
            while cur:
                stack.append(cur)
                cur = cur.left
            cur = stack.pop()
            k -= 1
            if k == 0:
                return cur.val
            cur = cur.right

複雜度
#

時間 O(h + k),空間 O(h)。

要特別避免的錯誤
#

  • 回傳的是值,不是節點。

面試口說整理
#

BST 的中序是由小到大,所以我用迭代的中序遍歷,數到第 k 個就回傳它的值。時間 O(h + k)。

相關文章

LeetCode 98: Validate Binary Search Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 98 解題筆記:每個節點都有一個合法範圍(下界, 上界),往左走上界變成自己、往右走下界變成自己;只比父子不夠
LeetCode 235: Lowest Common Ancestor of a Binary Search Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 235 解題筆記:p、q 都比節點小就往左,都比節點大就往右,否則(一邊一個或其中一個就是自己)這個節點就是 LCA
LeetCode 1448: Count Good Nodes in Binary Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 1448 解題筆記:DFS 往下傳路徑上的最大值,節點的值大於等於它就是好節點
LeetCode 199: Binary Tree Right Side View
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 199 解題筆記:層序遍歷,每一層最右邊的節點就是從右邊看得到的
LeetCode 938: Range Sum of BST
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 938 解題筆記:利用 BST 剪枝,節點比 low 小就只往右,比 high 大就只往左,在範圍內才加
LeetCode 606: Construct String from Binary Tree
·1 分鐘
LeetCode Medium String Tree Depth-First-Search Binary-Tree
LeetCode 606 解題筆記:前序輸出,左子樹空但右子樹不空時要留一個空括號 (),右子樹空時可以省略