230. Kth Smallest Element in a BST

https://leetcode.com/problems/kth-smallest-element-in-a-bst/

Iterative Solution:

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        cnt = 0
        stack = []
        curr = root
        stack.append(curr)
        while stack:
            while curr.left:
                stack.append(curr.left)
                curr = curr.left
            node = stack.pop()
            cnt+=1
            if cnt == k:
                return node.val
            node = node.right
            while node:
                stack.append(node)
                node = node.left
        return -1

Simplified Iterative Solution:

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        cnt = 0
        stack = []
        curr = root
        while True:
            while curr:
                stack.append(curr)
                curr = curr.left
            curr = stack.pop()
            cnt+=1
            if cnt == k:
                return curr.val
            curr = curr.right
    
        return -1

DFS Solution

class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        self.cnt = 0
        self.res = -1
        def dfs(node):
            if node == None:
                return
            dfs(node.left)
            self.cnt+=1
            if self.cnt == k:
                self.res = node.val
                return
            dfs(node.right)
        dfs(root)
        return self.res

Last updated

Was this helpful?