给定一个二叉树的中序与后序遍历结果,请你根据两个序列构造符合这两个序列的二叉树。
数据范围:二叉树的节点数满足
,节点上的值满足
,保证节点的值各不相同
例如输入[2,1,4,3,5],[2,4,5,3,1]时,
根据中序遍历的结果[2,1,4,3,5]和后序遍历的结果[2,4,5,3,1]可构造出二叉树{1,2,3,#,#,4,5},如下图所示:
[1],[1]
{1}
[2,1,4,3,5],[2,4,5,3,1]
{1,2,3,#,#,4,5}
/*
* function TreeNode(x) {
* this.val = x;
* this.left = null;
* this.right = null;
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param inorder int整型一维数组 中序遍历序列
* @param postorder int整型一维数组 后序遍历序列
* @return TreeNode类
*/
function buildTree(inorder, postorder) {
// write code here
if (postorder.length === 0) return null;
let val = postorder[postorder.length - 1];
let index = inorder.indexOf(val);
let in1 = inorder.slice(0, index);
let in2 = inorder.slice(index + 1);
let post1 = postorder.slice(0, index);
let post2 = postorder.slice(index, postorder.length - 1);
let root= new TreeNode(val);
root.left = buildTree(in1, post1);
root.right = buildTree(in2, post2);
return root
}
module.exports = {
buildTree: buildTree,
};