> For the complete documentation index, see [llms.txt](https://joshualbarb.gitbook.io/leetcode-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://joshualbarb.gitbook.io/leetcode-problems/binary-search-trees/kth-smallest-element-in-bst.md).

# Kth Smallest Element in BST

## Problem

Given a binary search tree, write a function `kthSmallest` to find the **k**th smallest element in it.

{% hint style="info" %}
For example:

```
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
```

{% endhint %}

## Solution

```
class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        self.s = None
        self.visited = 0
        self.helper(root, k)
        return self.s
        
    
    def helper(self, root,k):
        if root is None:
            return  
        self.helper(root.left,k)
        self.visited +=1
        if k == self.visited:
            self.s = root.val
            return
        self.helper(root.right, k)
        
#For any problems with inOrder traversal, in the 
#recursive method we have to traverse all the way 
#left before we do any operations

#We are using inOrder traversal approach

#We are keeping count of the nodes visited and 
#comparing this to our input k


#Time: O(h) where h is the height of the tree
#Space: O(h) because of call stack
```
