class BSTree: """ The binary search tree """ def __init__(self, val): """ Initializae the BSTree """ # Your code here pass def search(self, val): """ Search for a value in the tree, and return the tree node @return: the tree node that contain the val None if val is not in the tree """ # Your code here pass def insert(self, val): """ Insert a value """ # Your code here pass def delete(self, val): """ Delete a value from the tree """ # Your code here pass def toList(self, val): """ Convert tree values into a list in in-order traversal """ # Your code here pass
时间: 2023-06-26 14:08:57 浏览: 115
Binary-Search-Tree-Over-Array-Algorithm:该项目是执行诸如二进制搜索算法之类的算法的执行程序
以下是一个二叉搜索树(Binary Search Tree)的 Python 实现,包括了插入、删除、搜索和转换为列表等方法。
```python
class TreeNode:
"""The tree node class"""
def __init__(self, val):
self.val = val
self.left = None
self.right = None
class BSTree:
"""The binary search tree"""
def __init__(self, val):
"""Initialize the BSTree"""
self.root = TreeNode(val)
def search(self, val):
"""Search for a value in the tree, and return the tree node
@return: the tree node that contain the val
None if val is not in the tree
"""
curr_node = self.root
while curr_node:
if curr_node.val == val:
return curr_node
elif curr_node.val > val:
curr_node = curr_node.left
else:
curr_node = curr_node.right
return None
def insert(self, val):
"""Insert a value"""
new_node = TreeNode(val)
if not self.root:
self.root = new_node
return
curr_node = self.root
while curr_node:
if curr_node.val > val:
if curr_node.left:
curr_node = curr_node.left
else:
curr_node.left = new_node
return
else:
if curr_node.right:
curr_node = curr_node.right
else:
curr_node.right = new_node
return
def delete(self, val):
"""Delete a value from the tree"""
def find_min_node(node):
while node.left:
node = node.left
return node
def delete_node(node, val):
if not node:
return None
if node.val == 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(node.right)
node.val = min_node.val
node.right = delete_node(node.right, min_node.val)
elif node.val > 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 toList(self):
"""Convert tree values into a list in in-order traversal"""
res = []
def inorder_traversal(node):
if not node:
return
inorder_traversal(node.left)
res.append(node.val)
inorder_traversal(node.right)
inorder_traversal(self.root)
return res
```
使用方法:
```python
bst = BSTree(5)
bst.insert(3)
bst.insert(7)
bst.insert(2)
bst.insert(4)
bst.insert(6)
bst.insert(8)
print(bst.toList()) # [2, 3, 4, 5, 6, 7, 8]
bst.delete(5)
print(bst.toList()) # [2, 3, 4, 6, 7, 8]
node = bst.search(7)
print(node.val) # 7
```
阅读全文