给定一棵二叉搜索树,请找出其中第 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
正题
解析:
本质上是一个二叉树遍历的问题。
思路
-
遍历二叉树
-
将遍历的节点存储在数组中
-
将数组排序
-
数组第 k - 1 个下标即为答案
实现
二叉树的前序遍历,具体可参照之前的文章: 二叉树的前序遍历
/**
* 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 stack = []
let res = []
stack.push(root)
while (stack.length) {
const node = stack.pop()
res.push(node.val)
node.right ? stack.push(node.right) : ''
node.left ? stack.push(node.left) : ''
}
return res.sort((a, b) => {return b - a })[k -1]
};
相对来说还是比较简单的,只要掌握了二叉树的遍历,这题可以说没有任何难度。