用python创建名为shixun3_4.py.py的文件,在其中编写一个二叉排序树的类,该类必须包含二叉排序树的基本操作,同时实现二叉排序树的查找算法。请通过以下步骤测试动态查找表的实现是否正确。 ⑴初始化一个二叉排序树BSTree。 ⑵使用关键字为(4,9,5,11,25,3,12,17,1,32,20,15)的序列创建一棵二叉排序树。 ⑶中序遍历BSTree并输出。 ⑷查找关键字为17的结点。 ⑸查找关键字为38的结点。
时间: 2024-02-20 22:00:48 浏览: 83
好的,以下是一个 Python 实现的二叉搜索树类,以及按照您的要求进行的测试代码:
```python
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
class BSTree:
def __init__(self):
self.root = None
# 插入节点
def insert(self, key):
if self.root is None:
self.root = Node(key)
else:
self._insert(key, self.root)
def _insert(self, key, node):
if key < node.val:
if node.left is None:
node.left = Node(key)
else:
self._insert(key, node.left)
elif key > node.val:
if node.right is None:
node.right = Node(key)
else:
self._insert(key, node.right)
else:
return
# 中序遍历
def inorder_traversal(self):
if self.root is None:
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, key):
if self.root is None:
return None
else:
return self._search(key, self.root)
def _search(self, key, node):
if node is None or node.val == key:
return node
elif key < node.val:
return self._search(key, node.left)
else:
return self._search(key, node.right)
# 测试代码
bst = BSTree()
keys = [4, 9, 5, 11, 25, 3, 12, 17, 1, 32, 20, 15]
for key in keys:
bst.insert(key)
print(bst.inorder_traversal())
print(bst.search(17))
print(bst.search(38))
```
以上代码会输出以下内容:
```
[1, 3, 4, 5, 9, 11, 12, 15, 17, 20, 25, 32]
<__main__.Node object at 0x7fe7f8d5b040>
None
```
其中,`[1, 3, 4, 5, 9, 11, 12, 15, 17, 20, 25, 32]` 是中序遍历的结果,`<__main__.Node object at 0x7fe7f8d5b040>` 是关键字为 17 的结点,`None` 是关键字为 38 的结点(不存在)。
阅读全文