力扣 - 剑指 Offer 54. 二叉搜索树的第k大节点
阅读原文时间:2021年11月25日阅读:1

剑指 Offer 54. 二叉搜索树的第k大节点

  • 二叉搜索树的特性就是中序遍历结果为递增序列,而题目要求的是第 k 大节点,所以就应该是要遍历结果为降序,
  • 按照先遍历左子树、输出节点、遍历右子树得到的是升序结果,要得到降序,需要按照先遍历右子树、输出节点、再遍历左子树即可
  • 什么时候结束递归呢?有两种情况:

代码

class Solution {
    int k;
    int res;
    public int kthLargest(TreeNode root, int k) {
        this.k = k;
        dfs(root);
        return res;
    }

    public void dfs(TreeNode node) {
        if (node == null) {
            return;
        }

        dfs(node.right);
        k--;
        if (k == 0) {
            res = node.val;
            return;
        }
        dfs(node.left);
    }
}

复杂度分析

  • 时间复杂度:\(O(N)\)
  • 空间复杂度:\(O(N)\)