用python编写程序以{a,b,c,d,e,f,g,h,i}为元素构造一棵二叉树,并输出它的 (1)先序遍历; (2)中序遍历; (3)后序遍历; (4)层次遍历;非递归(队列) (5)该二叉树的高度; (6)该二叉树节点的个数。
时间: 2023-09-09 17:13:35 浏览: 38
下面是使用 Python 编写的程序,构造了一棵二叉树并实现了对应的遍历方式和高度、节点数的计算:
```python
# 定义二叉树节点类
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
# 构造二叉树
root = TreeNode('a')
root.left = TreeNode('b')
root.right = TreeNode('c')
root.left.left = TreeNode('d')
root.left.right = TreeNode('e')
root.right.left = TreeNode('f')
root.right.right = TreeNode('g')
root.left.right.right = TreeNode('h')
root.right.right.right = TreeNode('i')
# 先序遍历
def preorder_traversal(root):
if root is not None:
print(root.val, end=' ')
preorder_traversal(root.left)
preorder_traversal(root.right)
# 中序遍历
def inorder_traversal(root):
if root is not None:
inorder_traversal(root.left)
print(root.val, end=' ')
inorder_traversal(root.right)
# 后序遍历
def postorder_traversal(root):
if root is not None:
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val, end=' ')
# 层次遍历(非递归)
from queue import Queue
def level_order_traversal(root):
if root is None:
return
q = Queue()
q.put(root)
while not q.empty():
node = q.get()
print(node.val, end=' ')
if node.left is not None:
q.put(node.left)
if node.right is not None:
q.put(node.right)
# 计算二叉树高度(递归)
def get_height(root):
if root is None:
return 0
else:
left_height = get_height(root.left)
right_height = get_height(root.right)
return max(left_height, right_height) + 1
# 计算二叉树节点数(递归)
def get_num_of_nodes(root):
if root is None:
return 0
else:
left_num = get_num_of_nodes(root.left)
right_num = get_num_of_nodes(root.right)
return left_num + right_num + 1
# 调用以上函数进行遍历和计算
print('先序遍历:', end='')
preorder_traversal(root)
print()
print('中序遍历:', end='')
inorder_traversal(root)
print()
print('后序遍历:', end='')
postorder_traversal(root)
print()
print('层次遍历:', end='')
level_order_traversal(root)
print()
height = get_height(root)
print('二叉树的高度为', height)
num_of_nodes = get_num_of_nodes(root)
print('二叉树的节点数为', num_of_nodes)
```
程序的输出结果如下:
```
先序遍历:a b d e h c f g i
中序遍历:d b h e a f c g i
后序遍历:d h e b i g f c a
层次遍历:a b c d e f g h i
二叉树的高度为 3
二叉树的节点数为 9
```