给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。
也就是返回一个二维数组。
实现(迭代,提交通过)
import "container/list"
/**
* 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 (
res [][]int
q = NewQueue()
)
q.Push(root)
for !q.IsEmpty() {
c := q.Len()
level := make([]int, 0, c)
for i := 0; i < c; i++ {
node := q.Pop().(*TreeNode)
level = append(level, node.Val)
if node.Left != nil {
q.Push(node.Left)
}
if node.Right != nil {
q.Push(node.Right)
}
}
res = append(res, level)
}
return res
}
type Queue struct {
l *list.List
}
func NewQueue() *Queue {
return &Queue{
l: list.New(),
}
}
func (o *Queue) Push(v interface{}) {
o.l.PushBack(v)
}
func (o *Queue) Pop() interface{} {
if o.IsEmpty() {
panic("Queue is empty")
}
e := o.l.Front()
o.l.Remove(e)
return e.Value
}
func (o *Queue) Front() interface{} {
if o.IsEmpty() {
panic("Queue is empty")
}
return o.l.Front().Value
}
func (o *Queue) Back() interface{} {
if o.IsEmpty() {
panic("Queue is empty")
}
return o.l.Back().Value
}
func (o *Queue) IsEmpty() bool {
return o.l.Len() == 0
}
func (o *Queue) Len() int {
return o.l.Len()
}