返回
二叉树构建算法,探索从遍历序列中重建二叉树的方法
前端
2024-01-20 20:58:44
输入
[路飞]算法:105. 从前序与中序遍历序列构造二叉树
二叉树构建算法
在计算机科学中,二叉树是一种重要的数据结构,它广泛应用于各种算法和数据结构中。二叉树的构建方法有很多,其中一种常用的方法是从前序遍历和中序遍历序列中重建二叉树。
前序遍历和中序遍历
前序遍历和中序遍历都是二叉树的遍历方式。前序遍历的顺序是:根节点、左子树、右子树。中序遍历的顺序是:左子树、根节点、右子树。
从前序遍历和中序遍历序列中重建二叉树
从前序遍历和中序遍历序列中重建二叉树的方法如下:
- 在前序遍历序列中找到根节点。
- 在中序遍历序列中找到根节点的位置。
- 在中序遍历序列中,根节点左侧的元素是左子树的元素,右侧的元素是右子树的元素。
- 递归地使用上述方法构建左子树和右子树。
代码实现
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
# 找到前序遍历序列中的根节点
root_val = preorder[0]
# 在中序遍历序列中找到根节点的位置
root_index = inorder.index(root_val)
# 在中序遍历序列中,根节点左侧的元素是左子树的元素,右侧的元素是右子树的元素
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index + 1:]
# 在前序遍历序列中,根节点之后是左子树的元素,再之后是右子树的元素
left_preorder = preorder[1:root_index + 1]
right_preorder = preorder[root_index + 1:]
# 递归地使用上述方法构建左子树和右子树
left_tree = build_tree(left_preorder, left_inorder)
right_tree = build_tree(right_preorder, right_inorder)
# 返回构建好的二叉树
return TreeNode(root_val, left_tree, right_tree)
实例
给定前序遍历序列[1, 2, 4, 5, 3, 6, 7]
和中序遍历序列[4, 2, 5, 1, 6, 3, 7]
,我们可以使用上述方法重建出二叉树。
preorder = [1, 2, 4, 5, 3, 6, 7]
inorder = [4, 2, 5, 1, 6, 3, 7]
tree = build_tree(preorder, inorder)
print(tree)
输出结果:
1
├── 2
│ ├── 4
│ │ └── 5
│ └── 3
│ ├── 6
│ └── 7