golang刷leetcode 技巧(18)从上到下打印二叉树 II,III

2022-08-02 18:41:32 浏览数 (1)

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

例如:

给定二叉树: [3,9,20,null,null,15,7],

3

/

9 20

/

15 7

返回其层次遍历结果:

[

[3],

[9,20],

[15,7]

]

提示:

节点总数 <= 1000

解题思路:

1,本题和上题的区别是,每一层单独打一行

2,我们可以在插入下一层之前记录当前层的个数,即但强队列的长度

3,打印完当前层我们可以换行,进行下一层。

golang 知识积累

字节型 byte(1byte) == uint8

本质是uint8的类型,使用效果完全一样。

使用该别名是为了增强代码的可读性,告知现在是进行字节处理。

主要作用:表示和存储ASCII码,即处理字符。

字符型

字符以ASCII的形式存储到内存中。所以一个byte型数据直接输出就是uint8整数形式;也可以将对应的ASCII码转换成相应的字符。

rune类型 == int32

Go语言处理Unicode时专门的数据类型,完全等价于int32。

使用该别名是为了增强代码的可读性,告知现在是进行Unicode字符处理。

代码实现

代码语言:javascript复制
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
  var r [][]int
  if root==nil{
      return r
  }
  var q []*TreeNode
  q=append(q,root)
   for len(q)>0{
       l:=len(q)
       var row []int
       for i:=0;i<l;i  {
           h:=q[0]
           if h.Left!=nil{
               q=append(q,h.Left)
           }
           if h.Right!=nil{
               q=append(q,h.Right)
           }
           row=append(row,h.Val)
           q=q[1:]
       }
       r=append(r,row)
   }
   return r
}

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

例如:

给定二叉树: [3,9,20,null,null,15,7],

3

/

9 20

/

15 7

返回其层次遍历结果:

[

[3],

[20,9],

[15,7]

]

提示:

节点总数 <= 1000

解题思路

和上一题目相似,只是需要判断层的奇偶

代码实现

代码语言:javascript复制
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
  var r [][]int
  if root==nil{
      return r
  }
  var q []*TreeNode
  q=append(q,root)
  high:=0
   for len(q)>0{
       l:=len(q)
       var row []int
       for i:=0;i<l;i  {
           h:=q[0]
           if h.Left!=nil{
               q=append(q,h.Left)
           }
           if h.Right!=nil{
               q=append(q,h.Right)
           }
           if high%2==1{
               row=append([]int{h.Val},row...)
           }else{
               row=append(row,h.Val)
           }
           q=q[1:]
       }
       r=append(r,row)
       high  
   }
   return r
}

0 人点赞