二叉搜索树的第k大节点

给定一棵二叉搜索树,请找出其中第 k 大的节点的值。

思路

中序遍历结果就是二叉搜索树的排序结果,如果第一大是最小的数,就是正常的中序遍历。如果第一大是最大的数,就是中序遍历的到序,遍历时,先遍历右子树,再遍历左子树。

代码

class Solution {
private:
    TreeNode* desNode;
    int ak;
public:
    void kLargest(TreeNode* root) {
        if(root == nullptr || ak <= 0) return;
        kLargest(root->right);
        if(--ak == 0) {
            desNode = root;
        }
        kLargest(root->left);
    }       
    int kthLargest(TreeNode* root, int k) {
        if(root == nullptr) return INT_MIN;
        ak = k;
        kLargest(root);
        return desNode->val;
    }
};