题目描述:
给定一棵二叉搜索树,请找出其中第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 ≤ 二叉搜索树元素个数
代码:
注意二叉搜索树的中序遍历是一个递增序列。所以反向的中序遍历则是一个递减序列。
class Solution {
//二叉搜索树的中序遍历是一个递增序列,则反向中序遍历是一个递减序列,即右根左
//时间复杂度O(n)
int n,ans;
public int kthLargest(TreeNode root, int k) {
n = k;
dfs(root);
return ans;
}
public void dfs(TreeNode root){
if(root == null)
return ;
dfs(root.right);
if(--n == 0){
ans = root.val;
}
dfs(root.left);
}
}

本文介绍如何在二叉搜索树中通过中序遍历的逆序实现,快速找到第k大的节点。通过递归实现的`kthLargest`函数,时间复杂度为O(n),适用于数据结构和算法问题。
5855

被折叠的 条评论
为什么被折叠?



