返回

二叉树构建算法,探索从遍历序列中重建二叉树的方法

前端

输入
[路飞]算法:105. 从前序与中序遍历序列构造二叉树

二叉树构建算法

在计算机科学中,二叉树是一种重要的数据结构,它广泛应用于各种算法和数据结构中。二叉树的构建方法有很多,其中一种常用的方法是从前序遍历和中序遍历序列中重建二叉树。

前序遍历和中序遍历

前序遍历和中序遍历都是二叉树的遍历方式。前序遍历的顺序是:根节点、左子树、右子树。中序遍历的顺序是:左子树、根节点、右子树。

从前序遍历和中序遍历序列中重建二叉树

从前序遍历和中序遍历序列中重建二叉树的方法如下:

  1. 在前序遍历序列中找到根节点。
  2. 在中序遍历序列中找到根节点的位置。
  3. 在中序遍历序列中,根节点左侧的元素是左子树的元素,右侧的元素是右子树的元素。
  4. 递归地使用上述方法构建左子树和右子树。

代码实现

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