输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
3
/ \
9 20
/ \
15 7
js解法
/**
* 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=0){
return false;
}
const tree=new TreeNode(preorder[0]);//创建树
let inorderRootIndex=inorder.indexOf(tree.val);
//递归构建左子树
let inorderLeft=preorder.slice(1,inorderRootIndex+1)//前序左子树,从1开始是去掉根节点
let preorderLeft=inorder.slice(0,inorderRootIndex)//中序左子树
tree.left=buildTree(preorderLeft,inorderLeft)
//递归构建右子树
let inorderRight=preorder.slice(inorderRootIndex+1)//前序左子树
let preorderRight=inorder.slice(inorderRootIndex+1)//中序左子树
tree.left=buildTree(preorderRight,inorderRight)
return tree;
};