📌  相关文章
📜  在给定的二叉树中找到第 K 个最大的数(1)

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

在给定的二叉树中找到第 K 个最大的数

在二叉搜索树中,节点的值满足左子树的节点值小于等于该节点,右子树的节点值大于等于该节点。因此,可以通过中序遍历二叉搜索树得到一个有序的节点值序列。

本题可以先中序遍历该二叉搜索树得到一个有序的节点值序列,然后返回倒数第 K 个节点的值即可。

以下是基于递归中序遍历实现的 Python 代码片段:

class Solution:
    def __init__(self):
        self.rank = 0
        self.res = 0

    def kthLargest(self, root: TreeNode, k: int) -> int:
        self.inorder(root, k)
        return self.res

    def inorder(self, root, k):
        if not root:
            return
        self.inorder(root.right, k)
        self.rank += 1
        if self.rank == k:
            self.res = root.val
            return
        self.inorder(root.left, k)

首先,构造一个 Solution 类,其中包含两个成员变量 self.rank 和 self.res。

使用 self.inorder 函数递归遍历二叉搜索树,其中,先递归遍历右子树,再进行一些处理,最后递归遍历左子树。递归到某个节点时,先递归遍历右子树,这样在有序的节点值序列中,当前节点的值及其右边的所有节点的值均不会被遍历到。对于每个遍历到的节点,记录当前是第几个遍历到的节点(即第几大),若当前节点是第 K 大的节点,则将其值赋给 self.res,并返回。

得到了第 K 大的节点的值,就能通过函数返回该值。

以上代码时间复杂度为 O(N),其中 N 表示二叉搜索树的节点数。