题解 | #牛群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--
}
}
顺丰集团工作强度 322人发布