题解 | #按之字形顺序打印二叉树#
按之字形顺序打印二叉树
https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0?tpId=13&tqId=23454&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13
利用队列思想 + 二叉树的层次遍历。
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return int整型二维数组
*/
func Print(pRoot *TreeNode) [][]int {
// write code here
var result [][]int
if pRoot == nil {
return result
}
queue := []*TreeNode{pRoot} // 模拟队列
for len(queue) > 0 {
var levelNodes []int
size := len(queue)
for i := 0 ; i <= size -1 ; i++ {
node := queue[0] //取出队首位置的节点
queue = queue[1:] // 更新队列
if len(result)%2 == 0 { // 结果中如果是偶数,即将到来的下一层则是奇数层,顺序加入
levelNodes = append(levelNodes, node.Val)//奇数层顺序加入
}else {
levelNodes = append([]int{node.Val}, levelNodes...)//偶数层逆序加入
}
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
result = append(result, levelNodes)
}
return result
}