Skip to content

树的广度优先遍历

树的广度优先遍历指的是,从根节点开始,遍历下一层中所有的子节点,然后再继续遍历下一层子节点,以此类推。

子节点可以从左到右遍历,也可以从右到左遍历。

因为遍历节点的顺序相对固定,所以广度优先遍历不区分前序、中序和后序。

同样的遍历方式也可以用于图中。

应用

广度优先遍历可以应用于搜索引擎爬虫、社交网站寻找人脉关系、导航寻找最短路径上。

思路

广度优先遍历的大体思路是(以二叉树为例),利用一个队列,把根节点放入队列中,然后开始从队列里取出节点,进行遍历,再把当前遍历节点的所有子节点追加到队尾。按照队列先进先出的原则,当这一层所有节点都遍历完成之后,才能轮到下一层节点,这样队列为空之后,所有节点就遍历完了。

代码

这里是代码,queue 就是维护的队列,result 是遍历结果,我们会把遍历到的节点值放到这个结果数组中。后面在循环中会判断 queue 是否为空,然后遍历其中的节点,并把节点的子节点追加到队尾:

javascript
breadthFirstTraversal() {
  let result = [];
  let queue = [];
  queue.push(this.root);
  while (queue.length) {
    let current = queue.shift();
    result.push(current.value);
    if (current.left) {
      queue.push(current.left);
    }
    if (current.right) {
      queue.push(current.right);
    }
  }
  return result;
}