1. 程式人生 > 實用技巧 >廣度優先搜尋 BFS

廣度優先搜尋 BFS

1. 問題描述

使用廣度優先搜尋遍歷樹,輸出一個結果儲存在陣列中。

2. 分析

  1. 加入新結點到佇列中
  2. pop一個結點,加入到結果陣列中
  3. append當前結點的所有孩子結點到佇列中
  4. 重複2-3
  • 什麼時候停?當佇列中所有的結點都被pop完畢。

3. 程式碼

時間複雜度: O(V+E)

空間複雜度: O(V) 當孩子結點都在Level 1 上的時候,我們需要把 V-1個孩子結點一起加入佇列中。

class Node:
    def __init__(self, name):
        self.children = []
        self.name = name

    
def addChild(self, name): //O(E) edges are the number of childern self.children.append(Node(name)) return self def breadthFirstSearch(self, array): // O(V) queue = [self] while len(queue)>0: curr = queue.pop(0) array.append(curr.name) # append the curr.name, not just curr
for child in curr.children: queue.append(child) return array
import java.util.*;

class Program {
  static class Node {
    String name;
    List<Node> children = new ArrayList<Node>();

    public Node(String name) {
      this.name = name;
    }

    
public List<String> breadthFirstSearch(List<String> array) { Queue<Node> queue = new LinkedList<Node>(); queue.add(this); while(!queue.isEmpty()){ Node curr = queue.poll(); array.add(curr.name); queue.addAll(curr.children); } return array; } public Node addChild(String name) { Node child = new Node(name); children.add(child); return this; } } }