Skip to content

62 二叉搜索树的第k个结点

题目描述

给定一棵二叉搜索树,请找出其中第k大的节点。

解题思路

核心思想:中序遍历二叉搜索树得到有序序列,第k个节点就是第k大的节点。

Python 实现

python
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def kth_node(root, k):
    """
    找出二叉搜索树第k大的节点

    Args:
        root: 二叉搜索树根节点
        k: 第k大

    Returns:
        TreeNode: 第k大的节点
    """
    if not root or k <= 0:
        return None

    result = []
    index = 0

    def inorder(node):
        nonlocal index
        if not node or index >= k:
            return

        inorder(node.left)
        if index < k:
            result.append(node)
            index += 1
        inorder(node.right)

    inorder(root)

    return result[k - 1] if k <= index else None


# 测试代码
if __name__ == "__main__":
    # 构建BST:
    #     5
    #    / \
    #   3   7
    #  / \ / \
    # 2  4 6  8
    root = TreeNode(5)
    root.left.left = TreeNode(3)
    root.right.left = TreeNode(7)
    root.left.left.left = TreeNode(2)
    root.left.left.right = TreeNode(4)
    root.right.left.left = TreeNode(6)
    root.right.left.right = TreeNode(8)

    for k in range(1, 9):
        node = kth_node(root, k)
        if node:
            print(f"第{k}大: {node.val}")
        else:
            print(f"第{k}大: 不存在")

# 输出:
# 第1大: 2
# 第2大: 3
# 第3大: 4
# 第4大: 5
# 第5大: 6
# 第6大: 7
# 第7大: 8
# 第8大: 不存在
最近更新

基于 MIT 许可发布