从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
解题思路:
1,这是一个二叉树和队列结合的题目
2,我们从根节点开始
3,依次进入队列每个节点和左右孩子节点
4,每次弹出首节点返回
5,需要注意根节点为空的情况
6,golang可以用slice模仿队列
golang小知识积累:
var a []int
a:=[]int{}
a:=make([]int,0)
这3种声明方式,哪一种更优?
答案是第一种
原因,第二种和第3种都有空间分配,第一种没有
不分配内存的还有一种变量,这就要说到一个特殊变量:匿名变量 ,也称作占位符,或者空白标识符,用下划线表示。
匿名变量,优点有三:
- 不分配内存,不占用内存空间
- 不需要你为命名无用的变量名而纠结
- 多次声明不会有任何问题
代码实现
代码语言: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{
h:=q[0]
r=append(r,h.Val)
if h.Left!=nil{
q=append(q,h.Left)
}
if h.Right!=nil{
q=append(q,h.Right)
}
if len(q)==1{
return r
}else{
q=q[1:]
}
}
return r
}