1
头图

Zero title: Algorithm (leetcode, with mind map + all solutions) 300 questions (102) Level order traversal of binary tree

a topic description

题目描述
题目描述

Two solutions overview (mind map)

思维导图

All three solutions

1 Scenario 1

1) Code:

 // 方案1 “自己。2个队列法”。

// 思路:
// 1)边界:若 root 为假值,则 直接返回 [] 。
// 2)状态初始化:let resList = [], curLevel = 0, queue_1 = [root], queue_2 = [] 。
// 3)核心:跟2个队列(queue_1、queue_2)情况,对该二叉树进行遍历处理。
// 4)返回结果 resList 。
var levelOrder = function(root) {
    // 1)边界:若 root 为假值,则 直接返回 [] 。
    if (!root) {
        return [];
    }

    // 2)状态初始化:let resList = [], curLevel = 0, queue_1 = [root], queue_2 = [] 。
    let resList = [],
        curLevel = 0,
        queue_1 = [root],
        queue_2 = [];
    
    // 3)核心:跟2个队列(queue_1、queue_2)情况,对该二叉树进行遍历处理。
    while (queue_1.length !== 0) {
        const {val, left, right} = queue_1.shift();
        // 边界
        if (resList[curLevel] === undefined) {
            resList[curLevel] = [];
        }
        resList[curLevel].push(val);
        
        if (left) {
            queue_2.push(left);
        }
        if (right) {
            queue_2.push(right);
        }

        if (queue_1.length === 0) {
            curLevel++;
            // 注:以下2行 可简写成 [queue_1, queue_2] = [queue_2, []] 。
            queue_1 = queue_2;
            queue_2 = [];
        }
    }

    // 4)返回结果 resList 。
    return resList;
}

2 Option 2

1) Code:

 // 解法2 “自己。1个队列法(本质:方案1的优化版)”。
// 思路:
// 1)边界:若 root === null ,则 直接返回 [] 。
// 2)状态初始化:queue = [root], curLevel = 0, resList = [] 。

// 3)核心:若 queue.length !== 0,则 循环处理。
// 3.1)核心:处理本次 队列queue 里的所有节点
// 并将各节点值放入当前层次的列表中。
// 3.1.1)初始化本层列表。
// 3.1.2)分别根据 左、右子树 情况,更新 queue 值。
// 3.2)更新层次的值 curLevel++ 。

// 4)返回结果 resList 。
var levelOrder = function(root) {
    // 1)边界:若 root === null ,则 直接返回 [] 。
    if (root === null) {
        return [];
    }

    // 2)状态初始化:queue = [root], curLevel = 0, resList = [] 。
    let queue = [root],
        curLevel = 0,
        resList = [];
    
    // 3)核心:若 queue.length !== 0,则 循环处理。
    while (queue.length !== 0) {
        // 3.1)核心:处理本次 队列queue 里的所有节点
        // 并将各节点值放入当前层次的列表中。
        const l = queue.length;
        for (let i = 0; i < l; i++) {
            const {val, left, right} = queue.shift();
            // 3.1.1)初始化本层列表。
            if (!resList[curLevel]) {
                resList[curLevel] = [];
            }
            resList[curLevel].push(val);
            // 3.1.2)分别根据 左、右子树 情况,更新 queue 值。
            if (left !== null) {
                queue.push(left);
            }
            if (right !== null) {
                queue.push(right);
            }
        }

        // 3.2)更新层次的值 curLevel++ 。
        curLevel++;
    }

    // 4)返回结果 resList 。
    return resList;
}

3 Scenario 3

1) Code:

 // 解法3 “递归”。
// 参考:
// 1)https://leetcode.cn/problems/binary-tree-level-order-traversal/solution/dai-ma-jian-ji-yi-chong-huan-bu-cuo-de-j-139f/

// 思路:
// 1)状态初始化:curLevel = 0, curRoot = root, resList = [] 。
// 2)核心:调用递归函数。
// 3)返回结果 resList 。
var levelOrder = function(root) {
    // 递归函数
    const dfs = (curLevel = 0, curRoot = null) => {
        // 1)递归出口
        if (curRoot === null) {
            return;
        }

        // 2)递归主体
        const {val, left, right} = curRoot;

        // 2.1)初始化 本层的列表 。
        if (!resList[curLevel]) {
            resList[curLevel] = [];
        }
        // 2.2)本层的列表塞入 当前的节点值 。
        resList[curLevel].push(val);
        // 2.3)分别递归处理 左、右子树 。
        dfs(curLevel + 1, left);
        dfs(curLevel + 1, right);
    };

    // 1)状态初始化:curLevel = 0, curRoot = root, resList = [] 。
    let curLevel = 0,
        curRoot = root,
        resList = [];

    // 2)核心:调用递归函数。
    dfs(curLevel, curRoot);

    // 3)返回结果 resList 。
    return resList;
}

Four resource sharing & more

1 Historical Articles - Overview

历史文章 - 总览

刷题进度 - LeetCode:522 / 2657 、《剑指offer》:66 / 66

2 Introduction to bloggers

Code Farmer Sanshao, a blogger dedicated to writing minimalist but complete problem solutions (algorithms ).
Focus on one question, multiple solutions, structured thinking , welcome to brush through LeetCode ~


码农三少
54 声望8 粉丝