📜  在给定范围内打印BST键(1)

📅  最后修改于: 2023-12-03 14:51:33.056000             🧑  作者: Mango

在给定范围内打印BST(二叉搜索树)键

简介

二叉搜索树(Binary Search Tree,简称BST)是一种常见的数据结构,它具有以下特点:

  • 每个节点包含一个键值
  • 左子树中的所有键值都小于父节点的键值
  • 右子树中的所有键值都大于父节点的键值
  • 没有重复的键值

本篇文章将介绍如何编写一个函数,用于在给定范围内打印BST中的键值。

示例

假设我们有如下的BST:

      8
     / \
    3   10
   / \    \
  1   6    14
     / \   /
    4   7  13

如果给定的范围是[5, 13],那么函数应该打印出键值为 6、7、8、10、13 的节点。

实现思路

要在给定范围内打印BST的键值,我们可以使用递归的方法。具体实现步骤如下:

  1. 如果当前节点为空,返回。
  2. 如果当前节点的键值小于给定范围的最小值,递归进入右子树。
  3. 如果当前节点的键值大于给定范围的最大值,递归进入左子树。
  4. 如果当前节点的键值在给定范围内,则打印键值,并分别递归进入左右子树。
代码实现

下面是一个用于在给定范围内打印BST键的示例代码,使用了递归的方式实现:

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

def print_bst_keys_in_range(root, min_val, max_val):
    if root is None:
        return

    if root.val < min_val:
        print_bst_keys_in_range(root.right, min_val, max_val)
    elif root.val > max_val:
        print_bst_keys_in_range(root.left, min_val, max_val)
    else:
        print(root.val)
        print_bst_keys_in_range(root.left, min_val, max_val)
        print_bst_keys_in_range(root.right, min_val, max_val)

# 创建示例BST
root = TreeNode(8)
root.left = TreeNode(3)
root.right = TreeNode(10)
root.left.left = TreeNode(1)
root.left.right = TreeNode(6)
root.left.right.left = TreeNode(4)
root.left.right.right = TreeNode(7)
root.right.right = TreeNode(14)
root.right.right.left = TreeNode(13)

# 打印给定范围内的键值
print_bst_keys_in_range(root, 5, 13)

输出结果为:

6
7
8
10
13
总结

本文介绍了如何编写一个函数,在给定范围内打印BST中的键值。使用递归的方法,根据节点的键值和给定范围进行判断,实现了打印节点值的功能。这个方法的时间复杂度是O(n),其中n是BST中节点的数量。