37 lines
647 B
Go
37 lines
647 B
Go
package q199
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func rightSideView(root *TreeNode) []int {
|
|
ret := []int{}
|
|
|
|
type qElem struct {
|
|
height int
|
|
node *TreeNode
|
|
}
|
|
|
|
queue := []qElem{{0, root}}
|
|
var last *qElem
|
|
for ; len(queue) > 0; queue = queue[1:] {
|
|
cur := &queue[0]
|
|
if cur.node == nil {
|
|
continue
|
|
}
|
|
if last != nil && last.height < cur.height {
|
|
ret = append(ret, last.node.Val)
|
|
}
|
|
last = cur
|
|
queue = append(queue, qElem{cur.height + 1, cur.node.Left}, qElem{cur.height + 1, cur.node.Right})
|
|
}
|
|
if last != nil {
|
|
ret = append(ret, last.node.Val)
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
var _ = rightSideView
|