输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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;
let root = pre[0];
let rIndex = vin.indexOf(root);
let lVin = vin.slice(0,rIndex);
let rVin = vin.slice(rIndex+1);
return {
val: root,
left: reConstructBinaryTree(pre.slice(1, rIndex+1), lVin),
right: reConstructBinaryTree(pre.slice(rIndex+1), rVin)
};
}
先判断二叉树是否为空
由于知道前序遍历的第一个值为根节点,所以先令前序遍历这个数组的第一个值(根节点)赋给一个变量
然后再添加一个变量,通过用js的indexof方法找出中序遍历数组中根节点所在的位置
然后将中序遍历拆成两半来算
通过slice方法,将根节点左半部分的值作为左子树
右半部分为右子树
然后重建二叉树,也就是根节点 ->左子树(通过前序遍历的结果,还有通过中序遍历中根节点所在的索引位置,截取出来的这部分就是二叉树的左子树)->右子树(同理)