46 lines
908 B
Go
46 lines
908 B
Go
package main
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
/**
|
|
* Definition for a binary tree node.
|
|
* type TreeNode struct {
|
|
* Val int
|
|
* Left *TreeNode
|
|
* Right *TreeNode
|
|
* }
|
|
*/
|
|
func rightSideView(root *TreeNode) (out []int) {
|
|
if root == nil {
|
|
return
|
|
}
|
|
for stack := []*TreeNode{root}; len(stack) != 0; {
|
|
top := stack[len(stack)-1]
|
|
if len(stack) > len(out) {
|
|
out = append(out, top.Val)
|
|
}
|
|
if top.Right != nil {
|
|
stack = append(stack, top.Right)
|
|
} else if top.Left != nil {
|
|
stack = append(stack, top.Left)
|
|
} else {
|
|
stack = stack[:len(stack)-1]
|
|
if len(stack) != 0 {
|
|
new_top := stack[len(stack)-1]
|
|
// Easiest way to DFS by modification of tree.
|
|
// There was no requirement to keep it intact ¯\_(ツ)_/¯.
|
|
if new_top.Right == top {
|
|
new_top.Right = nil
|
|
} else {
|
|
new_top.Left = nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|