43 lines
826 B
Go
43 lines
826 B
Go
package q102
|
|
|
|
type TreeNode struct {
|
|
Val int
|
|
Left *TreeNode
|
|
Right *TreeNode
|
|
}
|
|
|
|
func levelOrder(root *TreeNode) [][]int {
|
|
if root == nil {
|
|
return [][]int{}
|
|
}
|
|
ret := [][]int{}
|
|
|
|
type qElem struct {
|
|
lvl int
|
|
node *TreeNode
|
|
}
|
|
curLvl := 0
|
|
curLvlNodes := []int{}
|
|
queue := []qElem{{0, root}}
|
|
for ; len(queue) > 0; queue = queue[1:] {
|
|
cur := &queue[0]
|
|
if cur.lvl != curLvl {
|
|
ret = append(ret, curLvlNodes)
|
|
curLvlNodes = []int{cur.node.Val}
|
|
curLvl = cur.lvl
|
|
} else {
|
|
curLvlNodes = append(curLvlNodes, cur.node.Val)
|
|
}
|
|
if cur.node.Left != nil {
|
|
queue = append(queue, qElem{lvl: cur.lvl + 1, node: cur.node.Left})
|
|
}
|
|
if cur.node.Right != nil {
|
|
queue = append(queue, qElem{lvl: cur.lvl + 1, node: cur.node.Right})
|
|
}
|
|
}
|
|
|
|
ret = append(ret, curLvlNodes)
|
|
return ret
|
|
}
|
|
|
|
var _ = levelOrder
|