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

按之字形顺序打印二叉树

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
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:46
点赞 评论 收藏
分享
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务