Go语言实现:【剑指offer】按之字形打印二叉树

时间:2023-03-09 21:38:01
Go语言实现:【剑指offer】按之字形打印二叉树

该题目来源于牛客网《剑指offer》专题。

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

Go语言实现:

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

func printTreeNode(root *TreeNode) [][]int {
var result [][]int
if root == nil {
return result
}

//初始化一个队列
list := list.New()
//从头部插入root
list.PushFront(root)
//开始层次遍历,在广度优先遍历基础上稍加调整
for level := 0; list.Len() > 0; level++ {
var currentLevel []int
//取本层的节点数
curentLenth := list.Len()
for i := 0; i < curentLenth; i++ {
//从尾部移除,Remove返回值为接口类型,需指定为TreeNode
node := list.Remove(list.Back()).(*TreeNode)
//root默认从左往右
currentLevel = append(currentLevel, node.Val)
//下一层从右往左
if level%2 == 0 {
if node.Right != nil {
list.PushFront(node.Right)
}
if node.Left != nil {
list.PushFront(node.Left)
}
} else { //继续从左往右
if node.Left != nil {
list.PushFront(node.Left)
}
if node.Right != nil {
list.PushFront(node.Right)
}
}
}
//当前层结束
result = append(result, currentLevel)
}

return result
}