題目出處
230. Kth Smallest Element in a BST
難度
medium
個人範例程式碼 - recursive 版本
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
self.k = k
self.final_ans = -1
self.dfs(root)
return self.final_ans
def dfs(self, root):
if not root:
return
self.dfs(root.left)
self.k -= 1
if self.k == 0:
self.final_ans = root.val
self.dfs(root.right)
return
算法說明
建立一個 global 的計數器 (這設計可能不太好),然後照 BST 的概念下去找第 K 小的值。
最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解
input handling
找不到對應結果時,回傳 -1 (題目沒有要求這部份)
Boundary conditions
x
個人範例程式碼 - iterative 版本
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
self.stack = deque()
self.to_left_bottom(root)
while(k > 0):
cur = node = self.stack[-1]
if node.right is not None:
node = node.right
self.to_left_bottom(node)
else:
node = self.stack.pop()
while self.stack and self.stack[-1].right == node:
node = self.stack.pop()
k -= 1 # get one node
if k == 0:
return cur.val
else:
return -1
def to_left_bottom(self, node):
while(node):
self.stack.append(node)
node = node.left
算法說明
iterative 的解法,我們借用 Binary Search Tree Iterator 的概念來使用,可參考:
https://wongwongnotes-github-io.pages.dev/python/leetcode-python-173/
最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解
input handling
找不到對應結果時,回傳 -1 (題目沒有要求這部份)
Boundary conditions
x