Medium
Given the root
of a binary search tree, and an integer k
, return the kth
smallest value (1-indexed) of all the values of the nodes in the tree.
Example 1:
Input: root = [3,1,4,null,2], k = 1
Output: 1
Example 2:
Input: root = [5,3,6,2,4,null,null,1], k = 3
Output: 3
Constraints:
n
.1 <= k <= n <= 104
0 <= Node.val <= 104
Follow up: If the BST is modified often (i.e., we can do insert and delete operations) and you need to find the kth smallest frequently, how would you optimize?
from typing import Optional
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 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 __init__(self):
self.k = 0
self.count = 0
self.val = None
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
self.k = k
self.count = 0
self.val = None
self.calculate(root)
return self.val
def calculate(self, node):
if not node:
return
if node.left:
self.calculate(node.left)
self.count += 1
if self.count == self.k:
self.val = node.val
return
if node.right:
self.calculate(node.right)