# 230. Kth Smallest Element in a BST

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.

What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

Hint:

1. Try to utilize the property of a BST.
2. What if you could modify the BST node's structure?
3. The optimal runtime complexity is O(height of BST).

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
int cnt = 0;
stack<TreeNode*> s;
TreeNode *p = root;
while (p || !s.empty()) {
while (p) {
s.push(p);
p = p->left;
}
p = s.top(); s.pop();
++cnt;
if (cnt == k) return p->val;
p = p->right;
}
return 0;
}
};

class Solution {
public:
int kthSmallest(TreeNode* root, int k) {
return kthSmallestDFS(root, k);
}
int kthSmallestDFS(TreeNode* root, int &k) {
if (!root) return -1;
int val = kthSmallestDFS(root->left, k);
if (!k) return val;
if (!--k) return root->val;
return kthSmallestDFS(root->right, k);
}
};

#### leetcode 230. Kth Smallest Element in a BST-递归|非递归

2016-05-24 11:17:50

#### LeetCode 230: Kth Smallest Element in a BST

2015-07-02 14:27:17

#### leetcode 230: Kth Smallest Element in a BST

2015-07-07 06:14:58

#### LeetCode 230. Kth Smallest Element in a BST 解题报告

2016-02-16 15:27:50

#### LeetCode-230. Kth Smallest Element in a BST (JAVA)二叉树第k小的数字

2017-04-29 10:36:27

#### leetcode_230. Kth Smallest Element in a BST 求二叉搜索树中的第k小的元素，中序遍历法

2016-11-28 17:48:27

#### 230.leetcode Kth Smallest Element in a BST(medium)[二叉搜索树 先序遍历 栈]

2016-08-05 15:46:54

#### [leetcode] 378. Kth Smallest Element in a Sorted Matrix 解题报告

2016-08-20 15:43:59

#### LeetCode—378. Kth Smallest Element in a Sorted Matrix

2016-08-02 10:20:37

#### 【Leetcode】Kth Smallest Element in a Sorted Matrix

2016-08-01 21:54:16