/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param k int整型 * @return int整型 */ int ans = 0, cnt = 0; int kthLighest(TreeNode* root, int k) { // write code here dfs(root, k); return ans; } int dfs(TreeNode* root, int k) { if (!root) return 0; dfs(root->left, k); if (++cnt == k) { ans = root->val; return 0; } dfs(root->right, k); return 0; } };
一、题目考察的知识点
二叉搜索树
二、题目解答方法的文字分析
二叉搜索树的中序遍历是一个升序遍历,所以在每次递归的时候我们都进行一次比较,并且赋值当前遍历节点的值给一个变量,只要比较次数到达k次,就找到了第k小值
三、本题解析所用的编程语言
c++