给定一棵二叉搜索树,请找出其中第k大的节点。
思路
中序遍历树,回溯时k-1,至0时,当前节点就是所求。
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
_node = nullptr;
_k = k;
_kthLargest(root);
return _node->val;
}
private:
void _kthLargest(TreeNode* root) {
if (!root)
return;
_kthLargest(root->right);
if (_k > 0) {
--_k;
if (!_k) {
_node = root;
}
if (_k <= 0)
return;
}
_kthLargest(root->left);
}
private:
int _k;
TreeNode* _node;
};