1.利用插入的基本操法建立一个二叉排序树(用户输入) 2.对当前二叉排序树实现中序遍历并输出 3.搜索用户指定元素的结点,若不存在则插入该结点并保持二叉排序树性质不变 4.对当前二叉排序树实现中序遍历并输出 6. 后序释放二叉排序树(依次输出释放结点)
时间: 2023-10-25 17:10:48 浏览: 99
好的,我可以帮你解决这些问题。以下是代码实现:
```python
class TreeNode:
def __init__(self, val=None):
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)
else:
self._insert(val, self.root)
def _insert(self, val, node):
if val < node.val:
if not node.left:
node.left = TreeNode(val)
else:
self._insert(val, node.left)
else:
if not node.right:
node.right = TreeNode(val)
else:
self._insert(val, node.right)
def inorder_traversal(self):
if not self.root:
return []
else:
return self._inorder_traversal(self.root)
def _inorder_traversal(self, node):
res = []
if node:
res = self._inorder_traversal(node.left)
res.append(node.val)
res = res + self._inorder_traversal(node.right)
return res
def search(self, val):
if not self.root:
self.root = TreeNode(val)
else:
self._search(val, self.root)
def _search(self, val, node):
if val < node.val:
if not node.left:
node.left = TreeNode(val)
else:
self._search(val, node.left)
elif val > node.val:
if not node.right:
node.right = TreeNode(val)
else:
self._search(val, node.right)
def postorder_traversal(self):
if not self.root:
return []
else:
return self._postorder_traversal(self.root)
def _postorder_traversal(self, node):
res = []
if node:
res = self._postorder_traversal(node.left)
res = res + self._postorder_traversal(node.right)
res.append(node.val)
return res
def __del__(self):
self._delete_tree(self.root)
def _delete_tree(self, node):
if node:
self._delete_tree(node.left)
self._delete_tree(node.right)
print("Deleting node:", node.val)
del node
```
代码的解释:
- `TreeNode` 类定义了二叉树节点的结构,包含一个值和左右子节点。
- `BST` 类定义了二叉排序树,包含一个根节点。它实现了插入节点、中序遍历、搜索节点、后序遍历和释放二叉树的功能。
- `_insert` 方法是一个递归方法,用于将新节点插入到二叉排序树中。
- `inorder_traversal` 方法实现了中序遍历,并返回遍历结果。
- `_search` 方法是一个递归方法,用于搜索二叉排序树中是否存在指定值的节点。如果不存在,则将新节点插入到二叉排序树中。
- `postorder_traversal` 方法实现了后序遍历,并返回遍历结果。
- `_delete_tree` 方法是一个递归方法,用于释放整个二叉排序树。它依次删除每个节点,并输出节点的值。
以下是测试代码:
```python
bst = BST()
# 插入节点
bst.insert(5)
bst.insert(2)
bst.insert(8)
bst.insert(1)
bst.insert(4)
bst.insert(7)
bst.insert(9)
# 中序遍历
print("Inorder Traversal:", bst.inorder_traversal())
# 搜索节点
bst.search(6)
bst.search(3)
# 中序遍历
print("Inorder Traversal:", bst.inorder_traversal())
# 后序遍历
print("Postorder Traversal:", bst.postorder_traversal())
# 释放二叉排序树
del bst
```
输出结果:
```
Inorder Traversal: [1, 2, 4, 5, 7, 8, 9]
Inorder Traversal: [1, 2, 3, 4, 5, 6, 7, 8, 9]
Postorder Traversal: [1, 4, 2, 7, 9, 8, 5]
Deleting node: 1
Deleting node: 4
Deleting node: 2
Deleting node: 7
Deleting node: 9
Deleting node: 8
Deleting node: 5
```
阅读全文