请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
Key : 使用flag 表示表示方位
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
if root == nil {
return nil
}
seq := []*TreeNode{root}
ret := [][]int{}
flag := true
for len(seq) !=0{
tmp := []*TreeNode{}
nodeval := []int{}
if flag {
for i:=len(seq)-1 ; i>=0;i-- {
nodeval = append(nodeval,seq[i].Val)
if seq[i].Left != nil{
tmp = append(tmp,seq[i].Left)
}
if seq[i].Right != nil{
tmp = append(tmp,seq[i].Right)
}
}
flag =false
}else{
for i:=len(seq)-1;i>=0;i--{
nodeval = append(nodeval,seq[i].Val)
if seq[i].Right != nil{
tmp = append(tmp,seq[i].Right)
}
if seq[i].Left != nil{
tmp = append(tmp,seq[i].Left)
}
}
flag = true
}
ret = append(ret,nodeval)
seq = tmp
}
return ret
}