[路飞]二叉树的右视图

105 阅读1分钟

记录 1 道算法题

二叉树的右视图

leetcode-cn.com/problems/bi…


每一层最右边的节点,马上就想到了层序遍历的时候,刚好就能拿到每一层的所有节点,我们只需要将最后一个节点推入结果数组就可以了。正好解决了如果最右边的节点不是右节点的情况。

            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
    }

也可以用递归的方式来做,优先遍历右边节点。