题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

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
}

全部评论

相关推荐

03-27 13:58
门头沟学院 Java
点赞 评论 收藏
分享
02-24 10:34
门头沟学院 Java
已注销:之前发最美的女孩基本爱答不理,发最帅的hr终于有反馈了,女孩子也要自信起来
点赞 评论 收藏
分享
03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务