1. 程式人生 > 實用技巧 >LeetCode 230. 二叉搜尋樹中第K小的元素

LeetCode 230. 二叉搜尋樹中第K小的元素

230. 二叉搜尋樹中第K小的元素

Difficulty: 中等

給定一個二叉搜尋樹,編寫一個函式kthSmallest來查詢其中第**k**個最小的元素。

說明:
你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。

示例 1:

輸入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
  2
輸出: 1

示例 2:

輸入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
輸出: 3

進階:
如果二叉搜尋樹經常被修改(插入/刪除操作)並且你需要頻繁地查詢第 k 小的值,你將如何優化kthSmallest

函式?

Solution

Language: 全部題目

涉及到二叉搜尋樹,一般會考到中序遍歷,中序遍歷把節點拿出來就簡單了。這題還可以用二分查詢解決?

# 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: TreeNode, k: int) -> int:
    res = []
    self.dfs(root, res)
    return res[k-1]
​
  def dfs(self, root, res):
    if root:
      self.dfs(root.left, res)
      res.append(root.val)
      self.dfs(root.right, res)