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