二叉排序树与文件操作代码
时间: 2023-12-17 12:29:16 浏览: 102
二叉排序树与文件操作
二叉排序树是一种特殊的二叉树,它的左子树中的所有节点的值都小于根节点的值,右子树中的所有节点的值都大于根节点的值。这种特殊的结构使得二叉排序树可以快速地进行查找、插入和删除操作。下面是一个使用Python实现的二叉排序树代码示例:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BST:
def __init__(self):
self.root = None
def insert(self, val):
if not self.root:
self.root = TreeNode(val)
return
node = self.root
while node:
if val < node.val:
if not node.left:
node.left = TreeNode(val)
return
node = node.left
else:
if not node.right:
node.right = TreeNode(val)
return
node = node.right
def search(self, val):
node = self.root
while node:
if val == node.val:
return True
elif val < node.val:
node = node.left
else:
node = node.right
return False
def delete(self, val):
def find_min(node):
while node.left:
node = node.left
return node
def delete_node(node, val):
if not node:
return None
if val == node.val:
if not node.left and not node.right:
return None
if not node.left:
return node.right
if not node.right:
return node.left
min_node = find_min(node.right)
node.val = min_node.val
node.right = delete_node(node.right, min_node.val)
elif val < node.val:
node.left = delete_node(node.left, val)
else:
node.right = delete_node(node.right, val)
return node
self.root = delete_node(self.root, val)
def inorder(self, node):
if not node:
return []
return self.inorder(node.left) + [node.val] + self.inorder(node.right)
# 示例代码
bst = BST()
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(1)
bst.insert(9)
print(bst.inorder(bst.root)) # 输出:[1, 3, 5, 7, 9]
bst.delete(3)
print(bst.inorder(bst.root)) # 输出:[1, 5, 7, 9]
```
文件操作是指对计算机文件进行读取、写入、修改等操作。在二叉排序树中,我们通常需要将数据保存到文件中,以便下次使用时可以直接读取,而不需要重新构建二叉排序树。下面是一个使用Python实现的文件操作代码示例:
```python
class FileBST(BST):
def __init__(self, filename):
super().__init__()
self.filename = filename
def load(self):
with open(self.filename, 'r') as f:
for line in f:
val = int(line.strip())
self.insert(val)
def save(self):
with open(self.filename, 'w') as f:
for val in self.inorder(self.root):
f.write(str(val) + '\n')
# 示例代码
bst = FileBST('data.txt')
bst.insert(5)
bst.insert(3)
bst.insert(7)
bst.insert(1)
bst.insert(9)
bst.save()
bst = FileBST('data.txt')
bst.load()
print(bst.inorder(bst.root)) # 输出:[1, 3, 5, 7, 9]
```
阅读全文