1. 题目
描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
数据范围:二叉树的节点数满足 1≤n≤10^5^
示例1
输入:
{1,2}
返回值:
[[1],[2]]
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
[[1],[2,3],[4,5]]
2. 解题思路
二叉树的层序遍历可以通过【队列】辅助完成,假如要遍历的二叉树如下图所示:
可以通过以下步骤完成层序遍历:
步骤一:定义一个队列,保存每一层的所有节点;先将根节点放入队列。
定义一个队列,初始化时将二叉树的根节点添加进去,此时队列只有一个数据,即count=1。
步骤二:执行出队列操作:出队列的左右子树再重新入队列。出队列的顺序就是二叉树层序遍历的顺序。
之后将队列中的3出队列,只出一个数据(因为此时的count==1)。之后再将3的左右子树入队列。
这时,队列中就有2个数据了,count==2。接下来出队列2个数据(因为count==2)。即将5和1出队列,同时将5和1的左右子树入队列。
这时,队列中就有4个数据了,count==4。接下来出队列4个数据(因为count==4)。即将6、2、0、和8出队列,同时将2的左右子树入队列(其他节点不用,因为节点的左右子树已经为Null)。
这时,队列中就有2个数据了,count==2。接下来出队列2个数据(因为count==2)。即将7和4出队列,7和4的左右子树都为Null了,就不再入队列。
到此时,队列为空,二叉树的层序遍历完成。将结果集返回。
如果文字描述的不太清楚,你可以参考视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1371457
- Java版本:https://www.bilibili.com/cheese/play/ep1367107
- Golang版本:https://www.bilibili.com/cheese/play/ep1364647
3. 编码实现
核心代码如下:
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
/**
*
* @param root TreeNode类
* @return int整型二维数组
*/
func levelOrder(root *TreeNode) [][]int {
res := make([][]int, 0) //返回最终结果变量
if root == nil {
return res
}
// 1. 定义一个队列,保存每一层的所有节点;先将根节点放入队列
queue := []*TreeNode{root}
//2. 执行出队列操作:出队列的左右子树再重新入队列
for len(queue) > 0 {
row := make([]int, 0) //保存 当前层(每一层)的节点
count := len(queue) //获取一层中的节点数量,并进行遍历
//如果当前层有节点,将节点数据添加到数组中,左、右子树添加到队列中
for i := 0; i < count; i++ {
node := queue[0] //获取队列的顶部元素
queue = queue[1:] //删除队列的顶部元素
row = append(row, node.Val) //节点值添加到切片中
//若是左右子节点存在,则存入左右节点作为下一个层次
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
res = append(res, row) //一层结束,将这一层的数据追加到结果变量中
}
return res
}
具体完整代码你可以参考下面视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1371457
- Java版本:https://www.bilibili.com/cheese/play/ep1367107
- Golang版本:https://www.bilibili.com/cheese/play/ep1364647
4.小结
二叉树的层序遍历可以通过【队列】辅助完成。步骤一:定义一个队列,保存每一层的所有节点;先将根节点放入队列;步骤二:执行出队列操作:出队列的左右子树再重新入队列。出队列的顺序就是二叉树层序遍历的顺序。
《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:
✅ 链表 ✅ 二叉树 ✅二分查找、排序 ✅ 堆、栈、队列 ✅回溯算法 ✅ 哈希算法 ✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
- Python编码实现:https://www.bilibili.com/cheese/play/ep1509965
- Java编码实现:https://www.bilibili.com/cheese/play/ep1510007
- Golang编码实现:https://www.bilibili.com/cheese/play/ep1509945
对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:如一夜春风来,千树万树梨花开。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。