二叉排序树(Binary Search Tree,BST)是一种常见的数据结构,它的特点是每个节点的值都大于或等于其左子树的所有节点的值,且小于或等于其右子树的所有节点的值。这种特性使得二叉排序树在插入、删除和查找操作上具有很高的效率。
在图书管理系统中,我们可以使用二叉排序树来存储图书信息,包括书名、作者、出版社等属性。以下是一个简单的实现:
```python
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
class BST:
def __init__(self):
self.root = None
def insert(self, key):
if self.root is None:
self.root = Node(key)
else:
self._insert(self.root, key)
def _insert(self, node, key):
if key < node.val:
if node.left is None:
node.left = Node(key)
else:
self._insert(node.left, key)
elif key > node.val:
if node.right is None:
node.right = Node(key)
else:
self._insert(node.right, key)
def search(self, key):
return self._search(self.root, key)
def _search(self, node, key):
if node is None or node.val == key:
return node
if key < node.val:
return self._search(node.left, key)
return self._search(node.right, key)
def inorder_traversal(self, node):
if node is not None:
self.inorder_traversal(node.left)
print("%s" % node.val),
self.inorder_traversal(node.right)
bst = BST()
bst.insert(10)
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(15)
bst.insert(20)
bst.insert(12)
bst.insert(8)
bst.insert(13)
bst.insert(14)
bst.insert(17)
bst.insert(19)
bst.insert(21)
bst.insert(22)
bst.insert(23)
bst.insert(24)
bst.insert(25)
bst.insert(26)
bst.insert(27)
bst.insert(28)
bst.insert(29)
bst.insert(30)
bst.insert(31)
bst.insert(32)
bst.insert(33)
bst.insert(34)
bst.insert(35)
bst.insert(36)
bst.insert(37)
bst.insert(38)
bst.insert(39)
bst.insert(40)
bst.insert(41)
bst.insert(42)
bst.insert(43)
bst.insert(44)
bst.insert(45)
bst.insert(46)
bst.insert(47)
bst.insert(48)
bst.insert(49)
bst.insert(50)
bst.insert(51)
bst.insert(52)
bst.insert(53)
bst.insert(54)
bst.insert(55)
bst.insert(56)
bst.insert(57)
bst.insert(58)
bst.insert(59)
bst.insert(60)
bst.insert(61)
bst.insert(62)
bst.insert(63)
bst.insert(64)
bst.insert(65)
bst.insert(66)
bst.insert(67)
bst.insert(68)
bst.insert(69)
bst.insert(70)
bst.insert(71)
bst.insert(72)
bst.insert(73)
bst.insert(74)
bst.insert(75)
bst.insert(76)
bst.insert(77)
bst.insert(78)
bst.insert(79)
bst.insert(80)
bst.insert(81)
bst.insert(82)
bst.insert(83)
bst.insert(84)
bst.insert(85)
bst.insert(86)
bst.insert(87)
bst.insert(88)
bst.insert(89)
bst.insert(90)
bst.insert(91)
bst.insert(92)
bst.insert(93)
bst.insert(94)
bst.insert(95)
bst.insert(96)
bst.insert(97)
bst.insert(98)
bst.insert(99)
bst.insert(100)
```
在这个实现中,我们首先定义了一个`Node`类,用于表示二叉排序树的节点。然后,我们定义了一个`BST`类,用于表示二叉排序树。在`BST`类中,我们实现了`insert`、`search`和`inorder_traversal`方法,分别用于插入、查找和中序遍历二叉排序树。最后,我们创建了一个`BST`实例,并使用`insert`方法插入了一些图书信息。