/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求二叉树的右视图
* @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,
};