function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
}
var pre = [1,2,4,7,3,5,6,8]
var vin = [4,7,2,1,5,3,8,6]
function reConstructBinaryTree(pre, vin) {
// write code here
if(pre.length > 0 && vin.length > 0){
// 先序遍历第一个节点为根节点
let root = new TreeNode(pre[0]);
// 获取中序遍历中根节点的位置,数组左边元素为左子树,右边为右子树
let index = vin.indexOf(pre[0]);
let leftArrV = vin.slice(0, index);
let rightArrV = vin.slice(index + 1,vin.length);
// 从先序遍历的节点中截取出对应元素
// 截取左子树,首节点为根,从1开始
let leftArrP = pre.slice(1, leftArrV.length + 1)
let rightArrP = pre.slice(leftArrV.length + 1, pre.length)
// 递归构建左右子树
let leftTree = reConstructBinaryTree(leftArrP, leftArrV);
let rightTree = reConstructBinaryTree(rightArrP, rightArrV);;
// 左右子树合并
root.left = leftTree;
root.right = rightTree;
return root;
}
return null;
}
console.log(reConstructBinaryTree(pre, vin))
一键复制
编辑
Web IDE
原始数据
按行查看
历史