Given a binary search tree, write a function kthSmallest
to find the kth smallest element in it.
Input: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 Output: 1
Input: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 Output: 3
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
- The number of elements of the BST is between
1
to10^4
. - You may assume
k
is always valid,1 ≤ k ≤ BST's total elements
.
# Definition for a binary tree node.
# class TreeNode
# attr_accessor :val, :left, :right
# def initialize(val = 0, left = nil, right = nil)
# @val = val
# @left = left
# @right = right
# end
# end
# @param {TreeNode} root
# @param {Integer} k
# @return {Integer}
def kth_smallest(root, k)
stack = []
while true
until root.nil?
stack.push(root)
root = root.left
end
root = stack.pop
k -= 1
return root.val if k == 0
root = root.right
end
end