Talk is cheap.
func printFromTopToBottom(root *TreeNode) [][]int {
res := [][]int{}
if root != nil {
level := []*TreeNode{root}
flag := 1
for len(level) != 0 {
restmp := []int{}
if flag == 1 {
for _, v := range level {
restmp = append(restmp, v.Val)
}
} else {
for i := len(level) - 1; i >= 0; i--{
restmp = append(restmp, level[i].Val)
}
}
res = append(res, restmp)
tmp := []*TreeNode{}
for _, v := range level {
if v.Left != nil {
tmp = append(tmp, v.Left)
}
if v.Right != nil {
tmp = append(tmp, v.Right)
}
}
level = tmp
flag *= -1
}
}
return res
}