输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回以下的二叉树
3
/ \
9 20
/ \
15 7
Array.slice (start, end)返回一个新数组,包含array中从start一直到end之间的所有元素(包含start指定的元素,但不包含end指定的元素)
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {number[]} preorder
* @param {number[]} inorder
* @return {TreeNode}
*/
var buildTree = function(preorder, inorder) {
if(!preorder.length||!inorder.length) return null
let rootVal=preorder[0];
let node=new TreeNode(rootVal)
let i=0
for(;i<inorder.length;i++){
if(inorder[i]===rootVal){
break;
}
}
node.left=buildTree(preorder.slice(1,i+1),inorder.slice(0,i));
node.right=buildTree(preorder.slice(i+1),inorder.slice(i+1));
return node
};