剑指offer——4.重建二叉树

来源:互联网 发布:大专女生知乎 编辑:程序博客网 时间:2024/06/06 01:28

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

代码

思路:二叉树前序遍历第一个点为根节点,中序遍历顺序为先左子树然后根节点最后右子树。所以先通过前序遍历找出根节点,然后将中序遍历分为左右子树两组,最后对于每个子树依次递归调用。

function reConstructBinaryTree(pre, vin){    // write code here    if(pre.length==0 || vin.length==0) return null;    var index=vin.indexOf(pre[0]);    var left=vin.slice(0,index);//中序左子树    var right=vin.slice(index+1);//中序右子树    return {        val:pre[0],        //递归左右子树的前序,中序         left:reConstructBinaryTree(pre.slice(1,index+1),left),        right:reConstructBinaryTree(pre.slice(index+1),right)     }; }