Skip to the content.

Ex54 二叉搜索树的第k大节点

题目描述

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

解题思路

倒着的中序遍历,即“右中左”。

代码

class Solution {
 public:
  int kthLargest(TreeNode *root, int k) { return kth_largest(root, k)->val; }

 private:
  TreeNode *kth_largest(TreeNode *root, int &k) {
    TreeNode *target = nullptr;
    if (root->right != nullptr) target = kth_largest(root->right, k);
    if (target == nullptr) {
      if (k == 1) target = root;
      --k;
    }
    if (target == nullptr && root->left != nullptr)
      target = kth_largest(root->left, k);
    return target;
  }
};

结果

执行结果:通过

执行用时:24 ms, 在所有 C++ 提交中击败了94.79%的用户

内存消耗:24.1 MB, 在所有 C++ 提交中击败了29.22%的用户