#+PROPERTY: STUDY_DECK_02 * TODO 0230. Kth Smallest Element In a Bst :medium: :PROPERTIES: :NEETCODE: [[file:../../roadmap.org::*0230. Kth Smallest Element In a Bst][0230. Kth Smallest Element In a Bst]] :END: Given the ~root~ of a binary search tree, and an integer ~k~, return /the/ ~k^{th}~ /smallest value (*1-indexed*) of all the values of the nodes in the tree/. *Example 1:* #+begin_src Input: root = [3,1,4,null,2], k = 1 Output: 1 #+end_src *Example 2:* #+begin_src Input: root = [5,3,6,2,4,null,null,1], k = 3 Output: 3 #+end_src *Constraints:* - The number of nodes in the tree is ~n~. - ~1 <= k <= n <= 10^{4}~ - ~0 <= Node.val <= 10^{4}~ *Follow up:* If the BST is modified often (i.e., we can do insert and delete operations) and you need to find the kth smallest frequently, how would you optimize? ** TODO Approach Write your approach here. ** TODO Python #+begin_src python # 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: #+end_src ** TODO C++ #+begin_src cpp /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int kthSmallest(TreeNode* root, int k) { } }; #+end_src