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