1. 题目描述
给定一棵二叉搜索树,请找出其中第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
2. 解题思路
我们知道,二叉搜索树的中序遍历的结果是一个有大到小的数组,所以我们可以倒中序遍历,然后将第结果的第k大节点返回即可。
复杂度分析:
- 时间复杂度 O(n),最差的情况下,也就是当树退化为链表时(全部为右子节点),无论 k 的值大小,递归深度都为 n ,占用 O(n) 时间;
空间复杂度 O(n),最差的情况下,也就是当树退化为链表时(全部为右子节点),系统使用 O(n) 大小的栈空间。
3. 代码实现
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthLargest = function(root, k) {
let res = []
const dfs = (root) => {
if(!root){
return
}
dfs(root.right)
res.push(root.val)
dfs(root.left)
}
dfs(root)
return res[k - 1]
};
4. 提交结果