Menu
CoddyTech

Kth Smallest Element in a BST

你会得到一棵二叉搜索树,它以堆顺序存储在数组 root 中:根节点位于索引 0,索引 i 的子节点位于 2*i+1(左)和 2*i+2(右),-1 表示空位置。数组末尾可能有多余的 -1 项。对于每个节点,左子树中只包含较小的值,右子树中只包含较大的值。

返回树中第 k 小的值,计数从 1 开始。

函数

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
按层序遍历的二叉搜索树,空位置用 -1 表示
kinteger
要查找的位置,按从小到大的顺序排列,从 1 开始
返回值integer
树中第 k 小的值

约束条件

  • 1 ≤ root.length ≤ 32767
  • 每个 root[i] 都是 -1 或满足 0 ≤ root[i] ≤ 105 的值。
  • root[0] 永远不会是 -1,所以这棵树至少有一个节点。
  • 最后一个节点之后,数组末尾可能还有额外的 -1 条目。
  • 空位的两个子节点也都是空的,且深度最多为 14。
  • 这个排序规则适用于每个节点,因此不会有重复值。
  • 1 ≤ k ≤ 树中的节点数。

示例

输入
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
输出
29
解释
按升序排列,这些值是 6, 17, 22, 29, 41, 65, 90,第四个值是 29。它是根节点左子树中四个值里最大的。
challenge icon

进阶

如果树经常变化,而且你需要多次查询第 k 小的值,每个节点可以存储什么信息,让每次查询都只需 O(h)?

重置代码
def kthSmallest(root, k):
    # 在这里编写代码

测试 #1

测试 #2

参数

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

预期输出

29