阅读 70

LeetCode 系列 - 二叉树层次遍历(BFS)

解题思路

二叉树的层序遍历一般采用 迭代 的方法,解题思路比较固定,基本逻辑框架如下:

  • 借助队列(先进先出)
  • 初始:根节点入队列
  • 迭代开始:
    当前队列中的节点依次出队列,每个节点出队列后需要:
    • 如果当前节点的左孩子存在,将左孩子入队列
    • 如果当前节点的右孩子存在,将右孩子入队列
    迭代直到队列为空结束,表示整棵树遍历完成。 在迭代过程中,可以根据题目实际情况,设置一些辅助变量,来保存遍历结果。

代码套路

解题思路比较固定,也就意味着二叉树层次遍历的代码逻辑也相对固定,代码基本结构如下:(本文代码使用 JavaScript)

  • 迭代解法
// ...

// 声名一个变量,用于保存最终结果
const result = [];
// 声名一个队列,辅助遍历,并且初始化将二叉树的根节点入队列
const queue = [root];

// 迭代开始
while (queue.length > 0) {
    // 注意:
    // 这里建议使用一个临时变量记录队列长度,因为 JavaScript 中使用数组模拟队列。
    // 在做队列的出队、入队操作时,会改变原数组,也就会影响队列长度(引用类型惹的祸)
    const qLength = queue.length;
    for (let i = 0; i < qLength; i++) {
        const currentNode = queue.shift();
        // 这里可以根据题目实际情况,对当前节点做一些逻辑处理
        currentNode.left && queue.push(currentNode.left);
        currentNode.right && queue.push(currentNode.right);
    }
    
    // ....
}

// ...
复制代码

LeetCode 练习题

文章分类
代码人生