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
}
原文地址:https://www.cnblogs.com/dubinyang/p/12099386.html