思路分析:
-
在
Solution
类中,声明了一个私有成员变量ans
,用于存储最终结果,即第k小的元素值。 -
定义了一个私有成员函数
mid
,用于中序遍历二叉搜索树,并在遍历的过程中找到第k小的元素。该函数接受三个参数:当前遍历节点root
、目标排名k
、以及计数器count
。 -
在
mid
函数中,首先进行递归调用mid(root->left, k, count)
,即遍历左子树。 -
在每个节点访问时,将计数器
count
自增1,表示当前节点的排名。 -
如果计数器
count
等于目标排名k
,则更新结果变量ans
为当前节点的值root->val
。 -
继续递归调用
mid(root->right, k, count)
,即遍历右子树。 -
在
kthSmallest
函数中,初始化计数器count
为0,然后调用mid(root, k, count)
进行中序遍历。 -
返回最终结果
ans
,即第k小的元素值。
class Solution {
int ans = 0;
// 中序遍历二叉树,找到第 k 小的元素
void mid(TreeNode* root, int k, int& count) {
if (root == NULL)
return;
else {
mid(root->left, k, count);
count++;
// 当 count 达到 k 时,更新答案
if (count == k)
ans = root->val;
mid(root->right, k, count);
}
}
public:
int kthSmallest(TreeNode* root, int k) {
int count = 0;
// 调用中序遍历函数
mid(root, k, count);
return ans;
}
};