给定一棵二叉搜索树,请找出其中第 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 ≤ 二叉搜索树元素个数
Related Topics
  • 深度优先搜索
  • 二叉搜索树
  • 二叉树

  • 👍 265
  • 👎 0
  • 中序遍历(倒着)

    二叉搜索树、既然顺着中序遍历是连续递增的序列,先遍历右子树、然后跟节点、最后左子树这样的顺序来遍历的话,就是一个连续递减的序列了。

    再找第K大的也就轻而易举了。

    代码

    class Solution {
        int theK;
        int theNum = -1;
        public int kthLargest(TreeNode root, int k) {
            theK = k;
            dfs(root);
            return theNum;
        }
    
        public void dfs(TreeNode node){
            if (null == node){
                return;
            }
            dfs(node.right);
            if (theK==0){
                return;
            }
            theK--;
            if (theK==0){
                theNum = node.val;
                return;
            }
            dfs(node.left);
        }
    }