Go实现如下

func zigzagLevelOrder( root *TreeNode ) [][]int {
    // write code here
    if root == nil {
        return make([][]int, 0, 0)
    }
    var queue = make([]TreeNode, 0, 0)
    var result = make([][]int , 0, 0)

    queue = append(queue, *root)
    leftToRight := true
    for len(queue) != 0 {
        length := len(queue)
        levelResult := make([]int, 0, 0)

        for i:= length - 1 ; i >= 0; i-- {
            node := queue[i]
            levelResult = append(levelResult, node.Val)
            if(leftToRight) {
                if node.Left != nil {
                    queue = append(queue, *node.Left)
                }
                if node.Right != nil {
                    queue = append(queue, *node.Right)
                }
            } else {
                if node.Right != nil {
                    queue = append(queue, *node.Right)
                }
                if node.Left != nil {
                    queue = append(queue, *node.Left)
                }
            }
        }

        leftToRight = !leftToRight
        queue = queue[length:]
        result = append(result, levelResult)
    }
    return result
}