记录 1 道算法题
二叉树的右视图
每一层最右边的节点,马上就想到了层序遍历的时候,刚好就能拿到每一层的所有节点,我们只需要将最后一个节点推入结果数组就可以了。正好解决了如果最右边的节点不是右节点的情况。
a
b c
d
function rightSideView(root) {
if (!root) return []
const stack = [root]
let res = []
while (stack.length > 0) {
let i = stack.length // 通过 i 来标记这一层的节点是 stack 里的前几个
let node
while (i > 0) {
// 收集下一层的节点
node = stack.shift()
node.left && stack.push(node.left)
node.right && stack.push(node.right)
i--
}
// 刚好循环结束时的 node 是最右边的一个
res.push(node.val)
}
return res
}
也可以用递归的方式来做,优先遍历右边节点。