DFS和BFS讲解及Leetcode刷题小结(2)(JAVA)
上一篇文章解决了DFS的问题,这次来解决BFS的问题就简单多了 DFS实现重要依赖于堆栈/递归 ,较为简单的解决了如何遍历所有元素,以及寻求“终点”的问题。 但是,DFS虽然可以查找到到达路径,但是却找不到最短的路径,针对这一问题,给出了BFS(广度优先遍历)的算法。 首先,先给出BFS的基本过程: 与DFS不同的是,这次不再是每个分叉路口一个一个走了,而是全部,同时遍历,直到找到终点,所对应的“层数”便是最短路径所需要的步数,BFS像是在剥洋葱,一层一层的拨开,最后到达终点。 如何实现呢? 我们利用队列来实现BFS,伪代码如下: int BFS(Node root, Node target) { Queue <Node> queue; // 建立队列 int step = 0; // 建立行动步数 // initialize add root to queue; // BFS while (queue is not empty) { step = step + 1 ; // 记录此时的队列大小 int size = queue.size(); for ( int i = 0; i < size; ++ i) { //遍历队列中的元素,并将新元素加入到队列中 Node cur = the first node in queue; return step if cur is