从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [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
}