力扣第102题Golang答案 二叉树的层序遍历
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
}