📌  相关文章
📜  完美二叉搜索树中第 K 个最小元素(1)

📅  最后修改于: 2023-12-03 15:09:26.291000             🧑  作者: Mango

完美二叉搜索树中第 K 个最小元素
简介

二叉搜索树,也称为二叉查找树,是一种基于树结构的数据结构,每个节点都有两个子节点。对于每个节点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)。

  1. 递归

通过递归获取完美二叉搜索树的所有节点值,并将其存放在一个列表中,再返回第 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 个最小元素。具体实现取决于具体情况,可灵活选择。

参考链接:

LeetCode官网