SOURCE

//输入先序遍历、中序遍历求后续遍历
const input1 = "FDXEAG";//
const input2 = "XDEFAG";

const dlr = input1.split('');
const ldr = input2.split('');

//遍历序列生成二叉树
function createNode(dlr, ldr){
    if( dlr.length === 0){
        //先序序列长度为0,说明整个树已经遍历完成
        return null;
    }

    if(ldr.length === 0){
        //中序序列长度为0,说明该节点上一级已是叶子节点
        return null;
    }
    //从先序序列获取一个节点的值
    const val = dlr.shift();
    //从中序序列中找到该节点的左右子树中序序列
    const index = ldr.indexOf(val);
    const left = ldr.slice(0, index);
    const right = ldr.slice(index + 1);
    //递归生成节点
    function Node() {
        this.val = val;
        this.left = createNode(dlr,left);
        this.right = createNode(dlr, right)
    }
    const node = new Node();
    return node;
}
//后续遍历,按照根右左的顺序遍历,反转后即为后序序列
function LRD(node, arr) {
    arr.push(node.val);
    if(node.right){
        LRD(node.right, arr);
    }
    if(node.left){
        LRD(node.left,arr)
    }
}
//生成二叉树,得到根节点
const tree = createNode(dlr, ldr);
//得到后序遍历序列
const lrd = []
LRD(tree, lrd);
//输出结果
console.log(lrd.reverse().join(''))
console 命令行工具 X clear

                    
>
console