题目描述
题目解读
题目让我们去查找二叉搜索树的第K大的节点,我们首先要搞懂下面几个问题:
- RQ:二叉搜索树和普通二叉树的区别在哪里?
二叉搜索树的特点是左子节点都比根节点小,右子节点都比根节点大。
解题思路
根据搜索二叉树的特点,我们可以进行一次逆中序遍历,中序遍历我们都知道是左根右的遍历方法,那么逆中序遍历顾名思义是右根左的遍历方法,这样遍历的好处是和二叉搜索树结合起来了,第一个遍历的右子节点就是第1大的元素,因此我们可以通过计数器的方式,一旦计数器到了K,此时的节点就是第K大的节点。
var kthLargest = function(root, k) {
// 实现逆中序遍历 + count
let cur = root;
const stack = [];
const res = [];
let count = 0;
while (stack.length || cur) {
while (cur) {
stack.push(cur);
cur = cur.right;
}
let node = stack.pop();
res.push(node.val);
count++;
if (count === k) return node.val;
if (node.left) {
cur = node.left;
}
}
};
总结
二叉搜索树这道题目有很多种解法,本次采用的是将逆中序遍历和计数器结合的方法来将第K大的节点找出来,这道题目同时需要我们对二叉搜索树的特点、中序遍历的方法都要有一定的理解才可以。