📅  最后修改于: 2023-12-03 15:09:26.291000             🧑  作者: Mango
二叉搜索树,也称为二叉查找树,是一种基于树结构的数据结构,每个节点都有两个子节点。对于每个节点x,其左子树所有节点的值都小于x节点的值,右子树所有节点的值都大于x节点的值。完美二叉搜索树是一种特殊的二叉搜索树,也称为红黑树。完美二叉搜索树中第 K 个最小元素即为这个树中第 K 小的元素。
1.中序遍历
完美二叉搜索树的中序遍历是一个有序的序列,因此可通过中序遍历获取第 K 个最小元素。
代码如下:
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
stack = []
while stack or root:
while root:
stack.append(root)
root = root.left
root = stack.pop()
k -= 1
if not k:
return root.val
root = root.right
时间复杂度为O(n),空间复杂度为O(n)。
通过递归获取完美二叉搜索树的所有节点值,并将其存放在一个列表中,再返回第 K 小的值。
代码如下:
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
self.res = []
self.helper(root)
return self.res[k - 1]
def helper(self, node):
if not node:
return
self.helper(node.left)
self.res.append(node.val)
self.helper(node.right)
时间复杂度为O(n),空间复杂度为O(n)。
通过中序遍历或递归,可以获取完美二叉搜索树中第 K 个最小元素。具体实现取决于具体情况,可灵活选择。
参考链接: