题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0
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 }