一、题目描述
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
二、我的题解
按层输出 是典型的 树的广度优先搜索 的题型。
树的广度优先搜索使用 队列 的先入先出特性(先出队的节点先加入其左右孩子)实现。
队列在 golang 中用 切片 数据类型实现。
(多一嘴:其实栈和队列的顺序存储在 golang 中都是用切片实现的)
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
if root == nil{
return nil
}
var re [][]int
var num []int
//队列
que := []*TreeNode{root}
var l int
for len(que) != 0{
l = len(que)
num = []int{}
for i:=0;i<l;i++{
num = append(num,que[i].Val)
}
re = append(re,num)
for i:=0;i<l;i++{
if que[i].Left != nil{
que = append(que,que[i].Left)
}
if que[i].Right != nil{
que = append(que,que[i].Right)
}
}
//该层出队
que = que[l:]
}
return re
}
评判结果: