题目描述: 给定一棵二叉搜索树,请找出其中第 k 大的节点的值。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/ \
14
\
2
输出: 4
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
36
/ \
24
/
1
输出: 4
思路分析: 首先想到的是中序遍历:左 -> 中 ->右,这样只要遍历完返回第length-k个节点就是我们的目标值了。但是这有点浪费性能,因为要把每一个节点都遍历到,因为要获得length,但是我们只要第k个就好了啊,所以遍历的有点多余,那么这时候我们想到,或许倒过来遍历是不是会更好一点,也就是说 右->中->左,这样就可以直接返回到第k个元素了,无需遍历k元素后面的小值,即无需遍历完整数组,达到优化性能了。
代码实现:
/**
* 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 order = (root) => {
if (!root) return null //没有根节点直接null
order(root.right) //遍历右节点
k--//每遍历完一个k都会少1个
if (!k) return order(res = root.val)//没有k的话找到这个值啦!
order(root.left) ///遍历左节点
}
order(root)//根节点
return res;
返回第k大的值~~
};
【排序算法|JS优化版(二叉搜索树第k大节点)】
推荐阅读
- javascript|JavaScript理论题(一)
- javascript|睡前做几道JavaScript理论练习题吧
- vue.js|Vue练习题--不定时分享
- 数据结构|二叉排序/搜索树类模板
- #|Python——数据结构——树——二叉树——二叉排序树
- 神经网络|【机器学习基础】常用激活函数(激励函数)理解与总结
- CCF-CSP|CCF-CSP认证201312-1(出现次数最多的数)
- 刷题|Acwing算法提高课—搜索
- 智能车算法|智能车摄像头算法——车库(识别斑马线)