题目
给定一棵二叉搜索树,请找出其中第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=0的时候,将当前节点值赋值给结果变量,那么当前节点的值就是第k大的
代码
int k;
int res;
public int kthLargest(TreeNode root, int k) {
this.k = k;
this.res = res;
dfs(root);
return res;
}
//中序遍历逆序
public void dfs(TreeNode root){
if(root==null || k==0) return;
dfs(root.right);
if(--k==0){
res = root.val;
return;
}
dfs(root.left);
}