题目描述
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 1
思路
中序遍历。
代码
/**
* 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) {
stack<TreeNode*> s;
int res;
while (root || !s.empty()){
while (root){
s.emplace(root);
root = root->left;
}
if (!s.empty()){
auto cur = s.top();
s.pop();
k--;
if (k==0) {
res = cur->val;
break;
}
if (cur->right) root = cur->right;
}
}
return res;
}
};