题目
题目来源:力扣(LeetCode)
给定一棵二叉搜索树,请找出其中第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 个节点” 。
const kthLargest = function(root, k) {
if (!root) return null;
let max = 0;
const dfs = function(root) {
// 判断节点是否为空
if (!root) return null;
// 递归右子树
dfs(root.right);
// 当 k 为 0 时,代表已找到目标节点,结束递归,返回结果
if (!--k) return max = root.val;
// 递归左子树
dfs(root.left);
}
dfs(root);
return max;
}