LeetCode 102. 二叉树的层序遍历
题目链接:LeetCode 102. 二叉树的层序遍历
题意:
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
解题思路:
借助一个队列,记录每一层的节点,实现层序遍历
代码1:
func levelOrder(root *TreeNode) [][]int {
var res [][]int
var query []*TreeNode //队列,记录每一层的节点
if root !=nil{
query = append(query,root) //若头节点不空,先放入队列中
}
for len(query) != 0 {
var level []int //记录每一层的节点
len := len(query)
for len > 0 {
len--
temp := query[0] //队头节点
query = query[1:] //队头出队
level = append(level,temp.Val)
if temp.Left != nil{
query = append(query,temp.Left)
}
if temp.Right != nil{
query = append(query,temp.Right)
}
}
res = append(res,level)
}
return res
}
代码2
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) (res [][]int) {
if root == nil {
return
}
curLevel := []*TreeNode{root} // 存放当前层节点
for len(curLevel) > 0 {
nextLevel := []*TreeNode{} // 准备通过当前层生成下一层
vals := []int{}
for _, node := range curLevel {
vals = append(vals, node.Val) // 收集当前层的值
// 收集下一层的节点
if node.Left != nil {
nextLevel = append(nextLevel, node.Left)
}
if node.Right != nil {
nextLevel = append(nextLevel, node.Right)
}
}
res = append(res, vals)
curLevel = nextLevel // 将下一层变成当前层
}
return
}