LeetCode Solutions
230. Kth Smallest Element in a BST
Time: $O(n^2)$ Space: $O(h)$
class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
const int leftCount = countNodes(root->left);
if (leftCount == k - 1)
return root->val;
if (leftCount >= k)
return kthSmallest(root->left, k);
return kthSmallest(root->right, k - 1 - leftCount); // LeftCount < k
}
private:
int countNodes(TreeNode* root) {
if (root == nullptr)
return 0;
return 1 + countNodes(root->left) + countNodes(root->right);
}
};
class Solution {
public int kthSmallest(TreeNode root, int k) {
final int leftCount = countNodes(root.left);
if (leftCount == k - 1)
return root.val;
if (leftCount >= k)
return kthSmallest(root.left, k);
return kthSmallest(root.right, k - 1 - leftCount); // LeftCount < k
}
private int countNodes(TreeNode root) {
if (root == null)
return 0;
return 1 + countNodes(root.left) + countNodes(root.right);
}
}
class Solution:
def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:
def countNodes(root: Optional[TreeNode]) -> int:
if not root:
return 0
return 1 + countNodes(root.left) + countNodes(root.right)
leftCount = countNodes(root.left)
if leftCount == k - 1:
return root.val
if leftCount >= k:
return self.kthSmallest(root.left, k)
return self.kthSmallest(root.right, k - 1 - leftCount) # LeftCount < k