层序遍历是逐层遍历树结构,采用 广度优先算法。访问的节点的顺序是按照层序遍历顺序
运用了队列的特性,先进先出,把左右节点放入队列中,然后依次从队列中取出,继续找取出节点的左右节点。
步骤:
- 定义队列 queue 先放入根节点
- 开始查看队列是否为空,不为空继续进行
- 取出队列个数,目的是进行遍历,依次从队列中取出元素
- 定义本次结果集,目的放入从队列中取出的值
- 开始依次从队列取值,如果本次节点有左右节点,放入队列中
- 结束后,本轮队列取值结束,把本轮结果放入结果集中
- 再检查队列是否完成,继续进行
function levelOrder(root: TreeNode | null): number[][] {
if(root === null) return []
let result: any = [] // 结果集里面存放二维数组
let queue: any = [root] // 队列用来存放左右节点,然后依次取出,初始是root
while(queue.length) {
let len = queue.length // 目的是要在本次取出多少个元素
let level: any = []
while(len--){ // 从队列中取出指定元素
let node = queue.shift()
level.push(node.val) // 把值放入本次结果集中
// 有左右节点,继续添加到队列中
if(node.left) queue.push(node.left)
if(node.right) queue.push(node.right)
}
// 放入本次结果
result.push(level)
}
return result
};