package BinaryTree
type TreeNodeQueue []*TreeNode
func (q *TreeNodeQueue) Size() int {
return len(*q)
}
func (q *TreeNodeQueue) IsEmpty() bool {
return len(*q) == 0
}
func (q *TreeNodeQueue) Enqueue(node *TreeNode) {
*q = append(*q, node)
}
func (q *TreeNodeQueue) Dequeue() *TreeNode {
if q.IsEmpty() {
return nil
} else {
node := (*q)[0]
*q = (*q)[1:]
return node
}
}
func levelOrder(root *TreeNode) [][]int {
result := make([][]int, 0)
if root == nil {
return result
}
q := new(TreeNodeQueue)
q.Enqueue(root)
for !q.IsEmpty() {
curCollection := make([]int, 0)
curLevelSize := q.Size()
for i := 0; i < curLevelSize; i++ {
cur := q.Dequeue()
curCollection = append(curCollection, cur.Val)
if cur.Left != nil {
q.Enqueue(cur.Left)
}
if cur.Right != nil {
q.Enqueue(cur.Right)
}
}
result = append(result, curCollection)
}
return result
}