python用二叉链表表示树,结点的值为结点的序号,创建n个结点的完全二叉树,输出前、中、后三种遍历。
时间: 2024-05-16 10:14:45 浏览: 76
下面是代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
# 创建完全二叉树
def create_tree(n):
# 完全二叉树的最后一层的结点数
last_level_num = n - 2 ** (n.bit_length() - 1) + 1
# 创建根结点
root = Node(1)
# 创建队列
queue = [root]
# 依次创建每个结点
for i in range(2, n+1):
# 取出队列中的头结点
node = queue[0]
if node.left and node.right:
# 如果当前结点的左右子树都已满,则弹出队列头结点
queue.pop(0)
if not node.left:
# 如果当前结点的左子树为空,则创建左子树
node.left = Node(i)
queue.append(node.left)
elif not node.right:
# 如果当前结点的左子树非空且右子树为空,则创建右子树
node.right = Node(i)
queue.append(node.right)
return root
# 前序遍历
def pre_order(root):
if not root:
return
print(root.val, end=' ')
pre_order(root.left)
pre_order(root.right)
# 中序遍历
def in_order(root):
if not root:
return
in_order(root.left)
print(root.val, end=' ')
in_order(root.right)
# 后序遍历
def post_order(root):
if not root:
return
post_order(root.left)
post_order(root.right)
print(root.val, end=' ')
# 测试代码
if __name__ == '__main__':
n = int(input("请输入结点数:"))
root = create_tree(n)
print("前序遍历:", end='')
pre_order(root)
print()
print("中序遍历:", end='')
in_order(root)
print()
print("后序遍历:", end='')
post_order(root)
```
示例输入:
```
请输入结点数:7
```
示例输出:
```
前序遍历:1 2 4 5 3 6 7
中序遍历:4 2 5 1 6 3 7
后序遍历:4 5 2 6 7 3 1
```
阅读全文