题解 | #牛群Z字型排列#

牛群Z字型排列

https://www.nowcoder.com/practice/50ddaf50c6954600a9f1dbb099d6f388?tpId=354&tqId=10591743&ru=/exam/oj/ta&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D354

知识点:

树的层序遍历

解题思路:

使用一个queue,存储每一层的节点,每次遍历queue,一边将结果放入当前层的结果集layer,一边将下一层的节点放入queue,直到queue为空。每次讲layer放入结果集res时判断当前树深度depth是否%2 =1(假设从0开始),等于1就反转layer结果集再放入res。

package main


/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param root TreeNode类
 * @return int整型二维数组
 */
func ZLevelOrder( root *TreeNode ) [][]int {
    // write code here
    res:=[][]int{}
    if root == nil{
        return res
    }
    queue:=[]*TreeNode{root}
    depth:=0
    for len(queue)>0{
        size:=len(queue)
        layer:=[]int{}
        for i:=0;i<size;i++{
            cur:=queue[0]
            queue = queue[1:]
            layer =append(layer, cur.Val)
            if cur.Left!=nil{
                queue = append(queue, cur.Left)
            }
            if cur.Right!=nil{
                queue =append(queue, cur.Right)
            }
        }
        if depth%2 == 1{
            reverse(layer)
        }
        depth++
        res =append(res, layer)
    }
    return res
}
func reverse(num []int){
    left:=0
    right:=len(num)-1
    for left < right{
        num[left],num[right]=num[right],num[left]
        left++
        right--
    }
}

全部评论

相关推荐

链接
海梨花:我说话难听,你这简历跟没写没啥区别,搜搜别人的简历,用心写,不要随随便便就结束了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务