编辑代码

package main
import "fmt"
func main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
    fmt.Println("Hello JSRUN!   \n\n         - from Golang .")
}

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
    ans := [][]int {{}} // 存储二叉树的节点
    if root == nil {
        return ans
    }
    var deep int
    queue := []*TreeNode {root} // 存储二叉树的父节点
    for len(queue) > 0 {    // 遍历队列
        ans = append(ans, []int {}) // 将新一层的节点数组加入ans
        length := len(queue)
        for length > 0 {    // 遍历该层节点
            length--
            ans[deep] = append(ans[deep], queue[0].Val) // 将遍历到的节点加入ans[deep]
            if queue[0].Left != nil {   // 如果该节点的左节点不为空
                queue = append(queue, queue[0].Left)    // 将左节点加入父节点队列
            }
            if queue[0].Right != nil {  // 如果该节点的右节点不为空
                queue = append(queue, queue[0].Right)   // 将右节点加入父节点队列
                queue = queue[1:]   // 将父节点从父节点队列中移除
            }
        }
        // 该层节点遍历完成
        deep++  // 准备进行下一层节点的处理
    }
    return ans
}