# 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?

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void traverse(TreeNode* root, int k, int& i, int& val)
{
if(root == NULL || i > k)
{
return;
}
traverse(root -> left, k, i, val);
++ i;
if(i == k)
{
val = root -> val;
}
traverse(root -> right, k, i, val);
}
int kthSmallest(TreeNode* root, int k)
{
int i = 0;
int val = 0;
traverse(root, k, i, val);
return val;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void findK(TreeNode* root, int k, int& N, int& num)
{
if(root == NULL)
{
return;
}

findK(root -> left, k, N, num);
if(N >= k)
{
return;
}
++N;
if(N == k)
{
num = root -> val;
return;
}
findK(root -> right, k, N, num);
if(N >= k)
{
//num = root -> val;
return;
}

}
int kthSmallest(TreeNode* root, int k) {
int num = 0;
int N = 0;
findK(root, k, N, num);
return num;
}
};

• 本文已收录于以下专栏：

## LeetCode 230: Kth Smallest Element in a BST

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not...
• sunao2002002
• 2015年07月02日 14:27
• 5614

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

230. Kth Smallest Element in a BST My Submissions Question Total Accepted: 35869 Total Su...
• bruce128
• 2016年02月16日 15:27
• 1549

## leetcode 230: Kth Smallest Element in a BST

leetcode 230: Kth Smallest Element in a BST python java c++
• xudli
• 2015年07月07日 06:14
• 9366

## LeetCode 230: Kth Smallest Element in a BST 查找二叉排序树

• SunliyMonkey
• 2015年09月02日 15:34
• 1326

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

• happyaaaaaaaaaaa
• 2016年05月24日 11:17
• 1095

## 【LeetCode】Kth Smallest Element in a BST 解题报告

【LeetCode】Kth Smallest Element in a BST 解题报告标签（空格分隔）： LeetCode题目地址：https://leetcode.com/problems/kth...
• fuxuemingzhu
• 2017年04月10日 14:28
• 194

## LeetCode 230 -Kth Smallest Element in a BST ( JAVA )

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. N...
• UckyK
• 2016年04月11日 17:33
• 666

## leetcode230:Kth Smallest Element in a BST（medium）

• qq_18297933
• 2016年08月21日 21:27
• 294

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

LeetCode-230. Kth Smallest Element in a BST (JAVA)二叉树第k小的数字
• mine_song
• 2017年04月29日 10:36
• 215

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

• qq508618087
• 2016年08月20日 15:43
• 1414

举报原因： 您举报文章：Kth Smallest Element in a BST 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)