剑指 Offer 07. 重建二叉树
题目描述:
输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
示例:
例如,给出
前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树:
思路:
二叉树前序遍历第一个点为根节点,中序遍历顺序为先左子树然后根节点最后右子树。所以先通过前序遍历找出根节点,然后将中序遍历分为左右子树两组,最后对于每个子树依次递归调用。
代码:
var buildTree = function(preorder, inorder) {
if(preorder.length==0 || inorder.length==0) return null;
var index=inorder.indexOf(preorder[0]);
var left=inorder.slice(0,index);//中序左子树
var right=inorder.slice(index+1);//中序右子树
return {
val:preorder[0],
//递归左右子树的前序,中序
left:buildTree(preorder.slice(1,index+1),left),
right:buildTree(preorder.slice(index+1),right)
};
};