给定两个整数数组 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]
实现:
var buildTree = function (preorder, inorder) {
if (!preorder.length || !inorder.length) {
return null;
}
let inIndex = 0;
while (inorder[inIndex] != preorder[0]) ++inIndex;
let le_pre = [],
le_in = [],
ri_pre = [],
ri_in = [];
for (let i = 0; i < inIndex; i++) {
le_pre.push(preorder[i + 1]);
le_in.push(inorder[i]);
}
for (let i = inIndex + 1; i < inorder.length; i++) {
ri_pre.push(preorder[i]);
ri_in.push(inorder[i]);
}
let root = new TreeNode(preorder[0]);
root.left = buildTree(le_pre, le_in);
root.right = buildTree(ri_pre, ri_in);
return root;
};
var buildTree1 = function (preorder, inorder) {
if(preorder.length===0)return null
const rootVal = preorder[0];
const inRootKey=inorder.indexOf(rootVal)
const root=new TreeNode(rootVal)
root.left=buildTree1(preorder.slice(1,inRootKey+1),inorder.slice(0,inRootKey))
root.left=buildTree1(preorder.slice(inRootKey+1),inorder.slice(inRootKey+1))
return root
}