后序中序还原二叉树之代码演示
代码演示:
var middleOrder = ["f", "c", "g", "a", "d", "b", "e"]; // 中序遍历数组
var postOrder = ["f", "g", "c", "d", "e", "b", "a"]; // 后序遍历数组
function Node(value) {
this.value = value;
this.left = null;
this.right = null;
}
function fn(middleOrder, postOrder) {
if (middleOrder === null || postOrder === null || middleOrder.length === 0 || postOrder.length === 0 || middleOrder.length !== postOrder.length) return null;
var root = new Node(postOrder[postOrder.length - 1]); // 根节点是后序遍历的最后一个
var index = middleOrder.indexOf(root.value); // 找到根节点在中序遍历中的所在位置
var middleOrderLeft = middleOrder.slice(0, index);
var middleOrderRight = middleOrder.slice(index + 1, middleOrder.length);
var postOrderLeft = postOrder.slice(0, index);
var postOrderRight = postOrder.slice(index, postOrder.length - 1);
root.left = fn(middleOrderLeft, postOrderLeft);
root.right = fn(middleOrderRight, postOrderRight);
return root;
}
var root = fn(middleOrder, postOrder);
console.log(root.left);
console.log(root.right);
运行结果: