跳转至

LC102 - 二叉树的层序遍历

LevelOrderTraversal.go.go
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
}