已知二叉树的前序和中序序列,编写算法建立该二叉树
时间: 2024-12-14 21:26:19 浏览: 4
已知一棵二叉树的前序遍历(Preorder)和中序遍历(Inorder),我们可以利用这两个序列重建出原始的二叉树,因为前序遍历的第一个元素总是根节点,而中序遍历可以帮助我们确定左子树和右子树。
以下是算法的基本步骤:
1. **寻找根节点**:
- 在前序遍历中找到第一个元素作为根节点,这是重建过程的关键。
- 同时记录下这个根节点的位置,它将在中序遍历中用于划分左右子树。
2. **构建左子树**:
- 在中序遍历中从找到的根节点位置开始向左查找,这部分就是左子树的中序序列。
- 使用同样的方法,分别找出左子树的前序和中序序列。
3. **构建右子树**:
- 右子树的中序序列是中序遍历剩余的部分,前序序列则是前序遍历中从根节点之后的所有元素。
- 对右子树重复上述步骤。
4. **递归**:
- 如果左子树的前序序列和中序序列都有,就继续对它们进行相同的处理,直到序列为空为止。
这里是一个简单的Python实现(假设`preorder`, `inorder`分别为前序和中序遍历列表):
```python
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
# 找到前序遍历中的根节点
root_val = preorder[0]
root_index = inorder.index(root_val)
# 创建根节点
root = TreeNode(root_val)
# 分别构建左右子树
root.left = build_tree(preorder[1:root_index+1], inorder[:root_index])
root.right = build_tree(preorder[root_index+1:], inorder[root_index+1:])
return root
```
其中,`TreeNode` 是一个代表二叉树节点的数据结构。
阅读全文