根据所输入二叉树的先序序列来构建二叉树,并实现二叉树的先序遍历,中序遍历和后序遍历算法并加以验证。 击此处添加备注 备注攀批注 SAMSUNG
时间: 2024-12-18 20:14:57 浏览: 6
在计算机科学中,给定一个二叉树的先序遍历序列(根节点 -> 左子树 -> 右子树),可以利用这个顺序信息来重建二叉树。先序遍历是指从根节点开始,然后遍历左子树,最后遍历右子树。
以下是步骤概述:
1. **先序遍历**:
- 获取序列的第一个元素作为根节点。
- 对剩余的序列使用同样的方法递归地构建左右子树。
```python
def buildTree(preorder):
if not preorder:
return None
root = TreeNode(preorder[0])
index = 1
# 在剩余的序列中找到root的左子树和右子树的位置
left_end = find_leftmost_child(preorder, root.val)
if left_end + 1 < len(preorder): # 如果有右子树
root.left = buildTree(preorder[index:left_end])
index = left_end + 1
if index < len(preorder): # 如果还有剩余,说明有右子树
root.right = buildTree(preorder[index:])
return root
def find_leftmost_child(preorder, val):
for i, node in enumerate(preorder):
if node == val:
return i
```
2. **遍历算法实现**:
- **先序遍历**: `preorder(root)`
- **中序遍历**: `inorder(root)`
- **后序遍历**: `postorder(root)`
```python
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=' ')
# 验证:
preorder = [3, 9, 20, 15, 7]
root = buildTree(preorder)
print("Preorder:", preorder)
inorder_traversal(root)
print("\nInorder: ", end='')
postorder_traversal(root)
```
在这个例子中,我们首先创建了一个二叉树,然后分别展示了其先序、中序和后序遍历的结果,以便确认重建的树是否正确。
阅读全文