排序算法|JS优化版(二叉搜索树第k大节点)

题目描述: 给定一棵二叉搜索树,请找出其中第 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大节点)】

    推荐阅读