为二叉搜索树节点定义一个类,该类具有三个属性:值、左和右。 实现一个函数以将节点插入二叉搜索树中。您可以使用递归来执行此操作。 实现一个函数来按顺序遍历二叉搜索树。这将为您提供节点值的排序列表。 实现一个函数,将二叉搜索树转换为循环双向链表。您可以使用上一步中的节点值的排序列表来执行此操作。 实现一个函数来打印二叉搜索树。您可以使用递归以可读格式打印树。 实现一个函数,以正顺序和反向顺序打印转换后的双向链表。您可以在两个方向上遍历列表来执行此操作。同时制作菜单(要求(1)打印二叉搜索树 (2)遍历二叉搜索树 (3)打印转换后的双链表 (4)按正反序输出双链表的所有元素)来展示
时间: 2024-02-13 11:00:08 浏览: 90
好的,这是一个关于二叉搜索树的问题集合,以下是我对每个问题的回答:
1. 二叉搜索树节点的定义:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
```
2. 插入节点到二叉搜索树中:
```python
def insert_node(root, val):
if not root:
return TreeNode(val)
if val < root.val:
root.left = insert_node(root.left, val)
else:
root.right = insert_node(root.right, val)
return root
```
3. 按顺序遍历二叉搜索树:
```python
def inorder_traversal(root):
if not root:
return []
return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right)
```
4. 将二叉搜索树转换为循环双向链表:
```python
def tree_to_doubly_list(root):
if not root:
return None
stack = []
node = root
pre = None
head = None
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
if not head:
head = node
if pre:
pre.right = node
node.left = pre
pre = node
node = node.right
pre.right = head
head.left = pre
return head
```
5. 打印二叉搜索树:
```python
def print_tree(root, level=0):
if not root:
return
print_tree(root.right, level+1)
print(' ' * 4 * level + '->', root.val)
print_tree(root.left, level+1)
```
6. 按正顺序和反向顺序打印转换后的双向链表:
```python
def print_doubly_list(head):
if not head:
return
node = head
while node.right != head:
print(node.val, end=' ')
node = node.right
print(node.val)
while node != head:
print(node.val, end=' ')
node = node.left
print(node.val)
```
最后,以下是一个简单的菜单来展示以上函数的使用:
```python
if __name__ == '__main__':
root = None
while True:
print('请选择操作:')
print('1. 插入节点')
print('2. 遍历二叉搜索树')
print('3. 将二叉搜索树转换为双向链表')
print('4. 打印二叉搜索树')
print('5. 打印双向链表')
print('6. 退出程序')
choice = int(input())
if choice == 1:
val = int(input('请输入节点值: '))
root = insert_node(root, val)
elif choice == 2:
print(inorder_traversal(root))
elif choice == 3:
head = tree_to_doubly_list(root)
print_doubly_list(head)
elif choice == 4:
print_tree(root)
elif choice == 5:
head = tree_to_doubly_list(root)
print_doubly_list(head)
elif choice == 6:
break
else:
print('无效的操作,请重新选择!')
```
阅读全文