LeetCode199 二叉树的右视图

55 阅读1分钟

leetcode.cn/problems/bi…

image.png

解法一:层序遍历

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func rightSideView(root *TreeNode) []int {
    res := []int{}
    if root == nil {
       return res
    }
    queue := make([]*TreeNode, 0)
    queue = append(queue, root)
    for len(queue) > 0 {
       total := len(queue)
       for i := 0; i < total; i++ {
          cur := queue[0]
          if i == total-1 { // 取每一层的最后一个节点
             res = append(res, cur.Val)
          }
          // 左、右子节点入队
          if cur.Left != nil {
             queue = append(queue, cur.Left)
          }
          if cur.Right != nil {
             queue = append(queue, cur.Right)
          }
          queue = queue[1:] // 弹出当前已遍历过的节点
       }
    }
    return res
}