【路飞】二叉树-从前序与中序遍历序列构造二叉树

164 阅读1分钟

题目:105. 从前序与中序遍历序列构造二叉树

image.png

分析

  1. 前序遍历:根节点-左子树-右子树

  2. 中序遍历:左子树-更节点-右子树 如果忘记了二叉树的知识,可以回顾这篇文章:二叉树学习

function buildTree(preorder, inorder) {
  // 当preorder和inorder均为空的时候说明已经到了空节点
  if (!preorder.length || !inorder.length) return null;
  // 获取根节点
  const root = preorder[0];
  // 找到preorder[0]对应inorder中的位置
  const index = inorder.indexOf(preorder.shift());
  // 依据preorder的顺序来构建左右子树,必须先构造左子树,再构造右子树
  const leftTree = buildTree(preorder, inorder.slice(0, index));
  const rightTree = buildTree(preorder, inorder.slice(index + 1));
  return {
    val: root,
    left: leftTree,
    right: rightTree,
  };
}