func levelOrder(root *TreeNode) [][]int { // 创建一个数组,存放结果 var result [][]int // 如果节点不存在,直接返回空数组 if root == nil { return result } // 创建一个队列,存放节点和所在的层级 [[节点,层级]] type Element struct { Node *TreeNode Level int } var queue []Element queue = append(queue, Element{ Node: root, Level: 0, }) // 当队列中有值的时候,一直循环 for len(queue) > 0 { // 取出队列中的第一个元素(队列先进先出) firstElement := queue[0] queue = queue[1:] // 如果结果中不存在该层级,则创建,否则则追加节点的值到对应层级 if len(result) == firstElement.Level { result = append(result, []int{firstElement.Node.Val}) } else { elementArr := result[firstElement.Level] elementArr = append(elementArr, firstElement.Node.Val) result[firstElement.Level] = elementArr } // 将左子树追加到队列 if firstElement.Node.Left != nil { tempElement := Element{ Node: firstElement.Node.Left, Level: firstElement.Level + 1, } queue = append(queue, tempElement) } // 将右子树追加到队列 if firstElement.Node.Right != nil { tempElement := Element{ Node: firstElement.Node.Right, Level: firstElement.Level + 1, } queue = append(queue, tempElement) } } // 返回结果数组 return result }