题目描述
给定两个整数数组 preorder 和 inorder,其中 preorder 是二叉树的先序遍历,inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
示例 1:

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]
示例 2:
输入: preorder = [-1], inorder = [-1]
输出: [-1]
思路&js代码
1、递归
var buildTree = function(preorder, inorder) {
const n = preorder.length;
if (n === 0) { // 空节点
return null;
}
const leftSize = inorder.indexOf(preorder[0]); // 左子树的大小
const pre1 = preorder.slice(1, 1 + leftSize);
const pre2 = preorder.slice(1 + leftSize);
const in1 = inorder.slice(0, leftSize);
const in2 = inorder.slice(1 + leftSize, n);
const left = buildTree(pre1, in1);
const right = buildTree(pre2, in2);
return new TreeNode(preorder[0], left, right);
};