题解 | 输出二叉树的右视图
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求二叉树的右视图
* @param preOrder int整型一维数组 先序遍历
* @param inOrder int整型一维数组 中序遍历
* @return int整型一维数组
*/
function solve(preOrder, inOrder) {
// write code here
function rebuild(_pre, _in) {
if (!_pre.length && !_in.length) return null;
const root = new TreeNode(_pre[0]);
const index = _in.indexOf(_pre[0]);
root.left = rebuild(_pre.slice(1, index + 1), _in.slice(0, index));
root.right = rebuild(_pre.slice(index + 1), _in.slice(index + 1));
return root;
}
function rightSideView(root) {
const quque = [root];
const res = [];
while (quque.length) {
const count = quque.length;
// 每一次循环是一层,把一层的全部拿出去 再找到子节点全部加进来
// 每一层最右边的节点 就是这一层的右视图
for (i = 0; i < count; i++) {
const node = quque.shift();
if (i === count - 1) {
res.push(node.val);
}
node.left && quque.push(node.left);
node.right && quque.push(node.right);
}
}
return res;
}
// 重建二叉树
const tree = rebuild(preOrder, inOrder);
// 层序遍历 输出每一层的最右侧的节点
const res = rightSideView(tree);
return res;
}
module.exports = {
solve: solve,
};
查看27道真题和解析