前序遍历和中序遍历是常用的二叉树遍历方式,它们可以用于构建二叉树。给定一个二叉树的前序遍历数组和中序遍历数组,我们可以通过这两个数组构建出原始的二叉树。本文将详细介绍如何根据前序遍历数组和中序遍历数组生成二叉树,并提供相应的源代码来实现这一过程。
首先,让我们回顾一下前序遍历和中序遍历的定义:
- 前序遍历:根节点 -> 左子树 -> 右子树
- 中序遍历:左子树 -> 根节点 -> 右子树
根据这两种遍历方式的特点,我们可以使用递归的方法来构建二叉树。下面是实现这一过程的步骤:
- 定义一个函数
buildTree(preorder, inorder)
,其中preorder
是前序遍历数组,inorder
是中序遍历数组。函数的返回值是生成的二叉树的根节点。 - 如果
preorder
或inorder
为空数组,则返回空节点null
。 - 从
preorder
中取出第一个元素,即为当前子树的根节点值。创建一个新节点root
,并将该值赋给root.val
。 - 在
inorder
中找到根节点值的索引,将inorder
分割成两部分,左侧部分是根节点的左子树的中序遍历数组,右侧部分是根节点的右子树的中序遍历数组。设左侧部分的长度为leftLen
。 - 在
preorder
中,将第一个元素剔除,得到剩余的前序遍历数组。将剩余的前序遍历数组分割成两部分,左侧部分的长度为