/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 求二叉树的右视图
 * @param preOrder int整型一维数组 先序遍历
 * @param inOrder int整型一维数组 中序遍历
 * @return int整型一维数组
 */

function rebuild(preOrder, inOrder) {
    if (preOrder.length == 0) return null;

    let div = inOrder.indexOf(preOrder[0]);

    let leftI = inOrder.slice(0, div);
    let rightI = inOrder.slice(div + 1);

    let leftP = preOrder.slice(1, leftI.length + 1);
    let rightP = preOrder.slice(leftI.length + 1);

    let thisRoot = new TreeNode(preOrder[0]);

    let left = rebuild(leftP, leftI);
    let right = rebuild(rightP, rightI);
    thisRoot.left = left;
    thisRoot.right = right;
    return thisRoot;
}

function solve(preOrder, inOrder) {
    // write code here
    let root = rebuild(preOrder, inOrder);
    // 根据中序遍历和前序遍历构建一棵树

    //接下来使用层次遍历,得到每一个层的最后一个
    // console.log(root)
    let arr = [root];
    let rightVision = [];

    while (arr.length != 0) {
        let layerLength = arr.length; //每一层的节点数量,要遍历到最后一个节点才结束
        console.log(layerLength)
        let current = null;
        for (let i = 0; i < layerLength; i++) {
            current = arr.shift(); //取出数列 头 的值
            console.log("current")
            // 放入左右子树
            if (current.left) arr.push(current.left);
            if (current.right) arr.push(current.right);
        }
        console.log(current)
        console.log(rightVision)
        rightVision.push(current.val);
    }
    return rightVision;
}
module.exports = {
    solve: solve,
};