1.#### 二叉搜索樹中第K小的元素
給定一個(gè)二叉搜索樹飞崖,編寫一個(gè)函數(shù) kthSmallest 來查找其中第 k 個(gè)最小的元素。
說明:
你可以假設(shè) k 總是有效的谨胞,1 ≤ k ≤ 二叉搜索樹元素個(gè)數(shù)固歪。
示例 1:
輸入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
輸出: 1
示例 2:
輸入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
輸出: 3
進(jìn)階:
如果二叉搜索樹經(jīng)常被修改(插入/刪除操作)并且你需要頻繁地查找第 k 小的值,你將如何優(yōu)化 kthSmallest 函數(shù)胯努?
/**
* 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:
int kthSmallest(TreeNode* root, int k) {
int num = 0;
int res ;
findk( root , k , num , res);
return res;
}
void findk(TreeNode* root, int k, int& num , int& res)
{
if(root == NULL) return;
findk(root->left,k,num,res);
num++;
if(num == k ) res = root->val;
findk(root->right,k,num,res);
return;
}
};