问题描述 建立一棵二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。 基本要求 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归 算法对其进行遍历(先序、中序和后序),将遍历结果打印输出。
时间: 2023-10-07 13:10:22 浏览: 121
好的,以下是Python代码实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def build_tree(preorder):
if not preorder:
return None
root_val = preorder.pop(0)
root = TreeNode(root_val)
idx = 0
for i in range(len(preorder)):
if preorder[i] > root_val:
break
idx = i
root.left = build_tree(preorder[:idx+1])
root.right = build_tree(preorder[idx+1:])
return root
def preorder_traversal(root):
if not root:
return
print(root.val, end=' ')
preorder_traversal(root.left)
preorder_traversal(root.right)
def inorder_traversal(root):
if not root:
return
inorder_traversal(root.left)
print(root.val, end=' ')
inorder_traversal(root.right)
def postorder_traversal(root):
if not root:
return
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val, end=' ')
if __name__ == '__main__':
preorder = list(map(int, input().split()))
root = build_tree(preorder)
print('Preorder Traversal: ', end='')
preorder_traversal(root)
print()
print('Inorder Traversal: ', end='')
inorder_traversal(root)
print()
print('Postorder Traversal: ', end='')
postorder_traversal(root)
print()
```
这里我们定义了一个`TreeNode`类来表示二叉树的节点,包含节点的值、左右子节点。`build_tree`函数接受先序遍历结果,递归地建立二叉树。具体来说,先取出先序遍历结果的第一个元素作为根节点,然后找到第一个大于根节点值的元素下标,将左子树的先序遍历结果传入递归函数,右子树同理,最后返回根节点。`preorder_traversal`、`inorder_traversal`、`postorder_traversal`分别实现了先序、中序、后序遍历,均采用递归实现。最后在`if __name__ == '__main__'`语句块中读入先序遍历结果,建立二叉树并进行三种遍历,打印输出遍历结果。
阅读全文