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