题目
给定一棵二叉搜索树,请找出其中第k大的节点。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
输出: 4
复制代码
来源:力扣(LeetCode)leetcode-cn.com/problems/er…
解题思路
- 二叉搜索树的中序遍历是一个有序升序数列
- 先遍历右子树再遍历左子树就是一个降序数列
- 用k计数,每遍历一个节点减1,k等于1时就是第k大的节点,譬如第1大的就是第1个节点
代码实现
var kthLargest = function(root, k) {
if (root === null) return
let ans = 0
//二叉搜索树的中序遍历是一个有序升序数列
//先遍历右子树再遍历左子树就是一个降序数列
//用k计数,每遍历一个节点减1,k等于0时就是第k大的节点
function dfs(root) {
if (!root) return
dfs(root.right)
if (k-- === 1) {
ans = root.val
return
}
dfs(root.left)
}
dfs(root)
return ans
};
复制代码
如有错误欢迎指出,欢迎一起讨论!