宽度与深度优先遍历

Posted 不做油腻的中年大叔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了宽度与深度优先遍历相关的知识,希望对你有一定的参考价值。

一、方法

宽度优先与深度优先遍历的重要性不言而喻

宽度优先遍历

  1. 利用队列实现

  2. 从源节点开始依次按照宽度进队列,然后弹出

  3. 每弹出一个点,把该节点所有没有进过队列的邻接点放入队列

  4. 直到队列变空

深度优先遍历

  1. 利用栈实现

  2. 从源节点开始把节点按照深度放入栈,然后弹出

  3. 每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈

  4. 直到栈变空

二、代码

//宽度
public static void BFS(Node node){
       if(node == null){
           return ;
      }
       Queue<Node> queue = new LinkedList<>();
       HashSet<Node> set = new HashSet<>();
       queue.add(node);
       set.add(node);
       while(!queue.isEmpty()){
           node = queue.poll();
           System.out.println(node.value);
           for(Node next : node.nexts){
               if(!set.contains(next)){
                   set.add(next);
                   queue.add(next);
              }
          }
      }
  }
//深度
public static void DFS(Node node){
       if(node == null){
           return ;
      }
       Stack<Node> stack = new Stack<>();
       HashSet<Node> set = new HashSet<>();
       stack.push(node);
       set.add(node);
       while(!stack.isEmpty()){
           node = stack.pop();
           System.out.print(node.value + " ");
           for(Node next : node.nexts){
               if(!set.contains(next)){
                   set.add(next);
                   stack.push(next);
              }
          }
      }
  }


如果面试官让你不用队列来实现宽度优先,不让用栈实现深度优先遍历,你知道怎么做吗?答案在摘要中!

以上是关于宽度与深度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章

Python数据结构-队列与广度优先搜索(Queue)

BAT手撕算法题·深度优先遍历

爬虫两种遍历策略的py实现:宽度优先和深度优先

java数据结构与算法之二叉树的最大宽度和最大深度问题

java数据结构与算法之二叉树的最大宽度和最大深度问题

算法系列之广度优先搜索与深度优先搜索