Teaching Kids Programming: Videos on Data Structures and Algorithms
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.
Example 1:
Input: root = [3,1,4,null,2], k = 13 / \ 1 4 \ 2Output: 1
Example 2:
Input: root = [5,3,6,2,4,null,null,1], k = 35 / \ 3 6 / \ 2 4 / 1Output: 3
Recursive Inorder Traversal Algorithm for a Binary Search Tree
The Inorder traversal algorithm of a binary search tree gives an ordered sequence. Thus, we can perform Recursive Inorder Traversal and store the elements in a list – and then we can easily retrieve the K-th smallest.
# 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: Optional[TreeNode], k: int) -> int:
def dfs(root):
if not root:
return []
return dfs(root.left) + [root.val] + dfs(root.right)
data = dfs(root)
return data[k - 1]
The time and space complexity for above Inorder Traversal algorithm is O(N) as we have to complete visiting all nodes no matter what the value of K is.
Kth Smallest Number in BST via Iterative Inorder Traversal
We actually don’t need to visit all the nodes. We can just visit the first K nodes of the inorder traversal. However, in order to do this, we need a stack to keep all the nodes in the left path. Thus the time complexity is O(H+K) where H is the height and it is about O(N) in the worst case where the tree is degraded into a singly linked list or O(LogN) when the Binary Search Tree is balanced.
# 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: Optional[TreeNode], k: int) -> int:
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
k -= 1
if k == 0:
return root.val
root = root.right
k-th Smallest Element in the Binary Search Tree
- Teaching Kids Programming – Kth Smallest Element in a BST via Recursive Inorder Traversal Algorithm
- Teaching Kids Programming – Kth Smallest Element in a BST via Iterative Inorder Traversal Algorithm
- Depth First Search Algorithm (Preorder Traversal) to Compute the Kth Smallest in a Binary Search Tree
- How to Find the Kth Smallest Element in a BST Tree Using Java/C++?
- Teaching Kids Programming – Kth Smallest Element in a BST via Recursive Counting Algorithm
–EOF (The Ultimate Computing & Technology Blog) —
675 wordsLast Post: Teaching Kids Programming - Cousin Nodes in Binary Tree via Breadth First Search & Depth First Search Algorithm
Next Post: Teaching Kids Programming - Remove a Node and Subtree using Depth First Search or Breadth First Search Algorithm