剑指 Offer 54. 二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。
- 方法一
- 先遍历全部节点
- 放到数组里面(去重)
- 排序
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthLargest = function(root, k) {
let res = new Set()
function dfs(root) {
if (root === null) return
res.add(root.val)
// 向set集合中添加一个元素,需要用到add(),
if(root.left) dfs(root.left);
if(root.right) dfs(root.right)
}
dfs(root)
let setArr = [...res];
setArr.sort((a, b) => {
return b-a
})
return setArr[k-1]
};
- 方法二
二叉搜索树的中序遍历 是有序的
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthLargest = function(root, k) {
let res = []
function dfs(root) {
if (root === null) return
dfs(root.right);
res.push(root.val)
dfs(root.left)
}
dfs(root)
return res[k-1]
};
本文探讨了两种在二叉搜索树中快速找出第k大节点的方法:一种是先遍历并排序,另一种利用中序遍历的有序特性。通过对比两种方法的优劣,展示了如何在不完全排序的情况下实现查找效率。
234

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



