面试题54. 二叉搜索树的第k大节点(简单)

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

示例 1:

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

1
2
3
4
5
  3
/ \
1 4
\
2

输出: 4

示例 2:

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

1
2
3
4
5
6
7
   5
/ \
3 6
/ \
2 4
/
1

输出: 4

限制:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof

思路:

找第k大的,如果是中序遍历,则是递增,所以逆中序遍历即可

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int no,k1;
public int kthLargest(TreeNode root, int k) {
//逆中序遍历即可
k1=k;
inorder(root);
return no;
}
//逆中序遍历
public void inorder(TreeNode root){
if(root == null)
return ;
inorder(root.right);
// if(k1 == 0) return;
if(--k1==0)
no = root.val;
inorder(root.left);
}
}