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

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

示例 1:

输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 4

示例 2:

输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 4

限制:

1 ≤ k ≤ 二叉搜索树元素个数

思路:
由于中序遍历二叉搜索树为递增序列,因此求第k大的元素即倒序遍历二叉搜索树到的第k个节点。

遍历每一个节点的时候让k–,那么遍历到k==0的时候指向的节点就是答案。传参数的时候需要传引用。

AC代码:(C++)

class Solution {
   public:
    int ans;
    int kthLargest(TreeNode *root, int k) {
        inOrder(root, k);
        return ans;
    }
    void inOrder(TreeNode *root, int &k) {
        if (root == nullptr) return;
        inOrder(root->right, k);
        k--;
        if (k == 0) {
            ans = root->val;
            return;
        }
        inOrder(root->left, k);
    }
};

版权声明:本文为weixin_44699689原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。