解法一:层序遍历
/**
* 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
}