Kth Smallest element in a BST
Problem Statement
Note: Your solution should have only one BST traversal and O(1)
extra space complexity, since this is what you will be asked to accomplish in an interview.
A tree is considered a binary search tree (BST) if for each of its nodes the following is true:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and the right subtrees must also be binary search trees.
Given a binary search tree t
, find the k<sup>th</sup>
smallest element in it.
Solution
Somehow it is intuitive that we should be using inorder traversal. We can keep a count variable to get the kth element while traversing the tree in inorder fashion.
Read out the comments in the below solution to understand better.
// we will call our function as KthSmallest(root, k, 0)
int KthSmallest(TreeNode root, int k, int count) {
// if not found
if(root==null)
return -1;
// Traverse the left subtree and check if kth element is found
int left = KthSmallest(root.left, k, count);
if(left!=-1)
return left;
// Increase the count, and check if the data(D) element is the ans (LDR)
count++;
if(count==k)
return root.data;
// Traverse the right subtree
return KthSmallest(root.right, k, count);
}
Time Complexity of above code will be O(n) - where n is the number of nodes in the tree, and space complexity will be O(1) as we are not using any additional space.
Subscribe to my newsletter
Read articles from Divyanshi Dixit directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Divyanshi Dixit
Divyanshi Dixit
I am a Software Engineer currently looking out for jobs around seattle, Washington.