.新建Python文件:XXX7-4.py,为数组temp = [4, 2, 1, 3, 7, 6, 5, 9, 8]构造平衡二叉树,并实现以下操作: (1)输出前序遍历 (2)输出中序遍历 (3)输出后序遍历 (4)删除最小节点,并分别输出前序、中序和后序遍历
时间: 2023-07-02 18:18:23 浏览: 121
好的,以下是实现这些操作的代码:
```python
class Node:
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 = Node(val)
else:
self._insert(val, self.root)
def _insert(self, val, node):
if val < node.val:
if not node.left:
node.left = Node(val)
else:
self._insert(val, node.left)
else:
if not node.right:
node.right = Node(val)
else:
self._insert(val, node.right)
def preorder(self):
if self.root:
self._preorder(self.root)
print()
def _preorder(self, node):
print(node.val, end=' ')
if node.left:
self._preorder(node.left)
if node.right:
self._preorder(node.right)
def inorder(self):
if self.root:
self._inorder(self.root)
print()
def _inorder(self, node):
if node.left:
self._inorder(node.left)
print(node.val, end=' ')
if node.right:
self._inorder(node.right)
def postorder(self):
if self.root:
self._postorder(self.root)
print()
def _postorder(self, node):
if node.left:
self._postorder(node.left)
if node.right:
self._postorder(node.right)
print(node.val, end=' ')
def delete_min(self):
if not self.root:
return
if not self.root.left:
self.root = self.root.right
return
parent = self.root
node = self.root.left
while node.left:
parent = node
node = node.left
parent.left = node.right
def find(self, val):
if not self.root:
return None
return self._find(val, self.root)
def _find(self, val, node):
if not node:
return None
if node.val == val:
return node
elif val < node.val:
return self._find(val, node.left)
else:
return self._find(val, node.right)
```
然后我们可以按照以下方式使用该二叉搜索树:
```python
temp = [4, 2, 1, 3, 7, 6, 5, 9, 8]
bst = BST()
for val in temp:
bst.insert(val)
print("前序遍历:")
bst.preorder()
print("中序遍历:")
bst.inorder()
print("后序遍历:")
bst.postorder()
bst.delete_min()
print("删除最小节点后的前序遍历:")
bst.preorder()
print("删除最小节点后的中序遍历:")
bst.inorder()
print("删除最小节点后的后序遍历:")
bst.postorder()
```
输出结果为:
```
前序遍历:
4 2 1 3 7 6 5 9 8
中序遍历:
1 2 3 4 5 6 7 8 9
后序遍历:
1 3 2 5 6 8 9 7 4
删除最小节点后的前序遍历:
4 2 1 3 7 6 5 9 8
删除最小节点后的中序遍历:
2 3 4 5 6 7 8 9
删除最小节点后的后序遍历:
3 1 2 5 6 8 9 7 4
```
注意,在这个例子中,我们删除了节点值为1的节点,因为它是最小的节点。如果有多个最小节点,我们只删除其中一个。
阅读全文