golang队列实现,使用list作为队列使用
package main
import "container/list"
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型二维数组
*/
type QueueNode struct{
Level int
Node *TreeNode
}
func Print( pRoot *TreeNode ) [][]int {
// write code here
res:=make([][]int, 0)
//队列
queue:=list.New()
queue.PushBack(&QueueNode{0,pRoot})
//标记遍历方向,true为从左向右遍历
// var flag bool =false
for queue.Len()!=0{
sn:=queue.Remove(queue.Front()).(*QueueNode)
if sn.Node==nil{
continue
}
//如果res没有申请该层一维数组,则申请
if len(res)<=sn.Level{
res = append(res, make([]int, 0))
}
//添加当前节点值
if sn.Level%2==0{
//从左向右,则按照出栈顺序添加到数组,尾插
res[sn.Level]=append(res[sn.Level], sn.Node.Val)
}else{
//从右向左,则按照出栈顺序反向添加,头插
res[sn.Level]=append([]int{sn.Node.Val},res[sn.Level]...)
}
//按先左后右的顺序入队
queue.PushBack(&QueueNode{sn.Level+1,sn.Node.Left})
queue.PushBack(&QueueNode{sn.Level+1,sn.Node.Right})
}
return res
}

京公网安备 11010502036488号