题目来源
题目描述
题目解析
Morris遍历
中序遍历
思路
中序遍历二叉搜索树,遍历的同时,把遍历到的节点存到一个可变数组里
实现
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
std::vector<int> vec;
helper(root, vec);
return vec[k - 1];
}
private:
void helper(TreeNode* root, std::vector<int> &vec){
if(root == NULL){
return ;
}
helper(root->left, vec);
vec.insert(vec.begin(), root->val);
helper(root->right, vec);
}
};
当遍历到了第K大数的时候,就可以停止遍历了
【注意是第K大,所以右根左;第K小才是左根右】
class Solution {
int ans = 0, cnt = 0;
public:
int kthLargest(TreeNode* root, int k) {
helper(root, k);
return ans;
}
private:
void helper(TreeNode* root, int k){
if(root == NULL){
return ;
}
helper(root->right, k);
if(++cnt == k){
ans = root->val;
return;
}
helper(root->left, k);
}
};
- 将上面改写成栈