给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
data := make([][]int,0) //结果存储二维数组
if root == nil {
return data
}
queue := make([]*TreeNode, 0) //采用队列FIFO原则
queue = append(queue, root) //先入队根节点
for len(queue) > 0 {
count := len(queue) //计算当前层节点数量
level := make([]int, 0)
i := 0
for i = 0; i < count; i ++ { //把当前层节点输出,同时把子节点入队
node := queue[0]
queue = queue[1:]
level = append(level, node.Val)
if node.Left != nil { //入队左节点(从左至右,先入左)
queue = append(queue, node.Left)
}
if node.Right != nil { //入队右节点
queue = append(queue, node.Right)
}
}
data = append(data, level) //收集一层的节点
}
return data
}