首页 > 试题广场 >

从中序与后序遍历序列构造二叉树

[编程题]从中序与后序遍历序列构造二叉树
  • 热度指数:9153 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个二叉树的中序与后序遍历结果,请你根据两个序列构造符合这两个序列的二叉树。

数据范围:二叉树的节点数满足 ,节点上的值满足 ,保证节点的值各不相同

例如输入[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]

输出

{1}
示例2

输入

[2,1,4,3,5],[2,4,5,3,1]

输出

{1,2,3,#,#,4,5}

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
/*
 * 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,
};


发表于 2025-05-30 10:28:49 回复(0)