/** * 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; vector<int>ve; int kthLargest(TreeNode* root, int k) { // write code here dfs(root, k); int n = ve.size(); return ve[n - k]; } int dfs(TreeNode* root, int k) { if (!root) return 0; dfs(root->left, k); ve.push_back(root->val); dfs(root->right, k); return 0; } };
一、题目考察的知识点
二叉排序树遍历
二、题目解答方法的文字分析
这个题目和第k小其实差不多,只需要转化一下就行,把每次遍历节点的值存入一个动态数组,因为二叉搜索树中序遍历的结果是一个递增数列,那么第k大就是动态数组的n-k+1,但是因为动态数组下标是从0开始计数的,所以在返回的时候只需要n-k就行
三、本题解析所用的编程语言
c++