102. 二叉树的层序遍历

    层序遍历是逐层遍历树结构,采用 广度优先算法。访问的节点的顺序是按照层序遍历顺序

    运用了队列的特性,先进先出,把左右节点放入队列中,然后依次从队列中取出,继续找取出节点的左右节点。

    步骤:

    1. 定义队列 queue 先放入根节点
    2. 开始查看队列是否为空,不为空继续进行
    3. 取出队列个数,目的是进行遍历,依次从队列中取出元素
    4. 定义本次结果集,目的放入从队列中取出的值
    5. 开始依次从队列取值,如果本次节点有左右节点,放入队列中
    6. 结束后,本轮队列取值结束,把本轮结果放入结果集中
    7. 再检查队列是否完成,继续进行
    1. function levelOrder(root: TreeNode | null): number[][] {
    2. if(root === null) return []
    3. let result: any = [] // 结果集里面存放二维数组
    4. let queue: any = [root] // 队列用来存放左右节点,然后依次取出,初始是root
    5. while(queue.length) {
    6. let len = queue.length // 目的是要在本次取出多少个元素
    7. let level: any = []
    8. while(len--){ // 从队列中取出指定元素
    9. let node = queue.shift()
    10. level.push(node.val) // 把值放入本次结果集中
    11. // 有左右节点,继续添加到队列中
    12. if(node.left) queue.push(node.left)
    13. if(node.right) queue.push(node.right)
    14. }
    15. // 放入本次结果
    16. result.push(level)
    17. }
    18. return result
    19. };