题目描述
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
示例 1:
输入: root = [3,1,4,null,2], k = 1
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
输出: 3
提示:
- 树中的节点数为
n。 1 <= k <= n <= 1040 <= Node.val <= 104
进阶: 如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?
解题思路
二叉搜索树的性质:
对于任意一棵子树,根节点的值大于左子节点的值,根节点的值小于右子节点的值
基于以上二叉搜索树的性质,如果对二叉搜索树进行中序遍历的话,将会得到一个严格升序的序列,
获取这个序列中的第 k 个元素,就是二叉搜索树中第 k 个最小元素。
代码实现
var kthSmallest = function(root, k) {
let stack = [];
let node = root;
while(node || stack.length){
// 遍历左子树
while(node){
stack.push(node)
node = node.left
}
node = stack.pop()
if(--k === 0){
return node.val
}
node = node.right
}
return null
至此我们就完成了leetcode-230-二叉搜索树中第K小的元素