Leecode刷题之二叉树层序遍历

81 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情
什么是二叉树
笔者总结:二叉树是每个节点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树可以为空;或者左、右子树皆为空。
什么是二叉树的层序遍历
举个例子,先画一个二叉树,如下图所示

Snipaste_2022-12-18_19-50-44.jpg

然后一层一层来遍历,第一层只有A,第二层有B、C两节点,第三层有D、E、F、G四个节点,所以此二叉树层序遍历的结果为:A B C D E F G

Snipaste_2022-12-18_19-55-36.jpg 二叉树层序遍历,先遍历的结点,先输出,后遍历的结点后输出,符合队列的特点。 循环的终结条件:
就是队列中所有的元素全部弹出
每次循环需要干什么
第一步:从上往下遍历二叉树,将树节点依次push入队列每一次我们再将一层中的节点push进入队列中,需要对当前层的节点进行计数(let size: number = queue.length;),然后,确认当前层有多少个节点是需要被弹出队列的
第二步:每弹出一个节点的时候需要判断他是否有左右子节点,如果有的话,需要将他的子节点从左往右push进入队列即可,完整代码如下所示:

/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function levelOrder(root: TreeNode | null): number[][] {
    if (root == null) return [];
    let result: number[][] = []
    let queue: TreeNode[] = [];
    queue.push(root);
    while(queue.length > 0){
        let size: number = queue.length;
        console.log('size:',size)
        let arr: number[] = new Array();
        while(size--){
            let node: TreeNode = queue.shift()!;
            arr.push(node.val);
            if (node.left!=null) queue.push(node.left);
            if (node.right!=null) queue.push(node.right);
        }
        result.push(arr)
    }
    return result;
};