廣度優先搜尋 BFS
阿新 • • 發佈:2021-01-07
1. 問題描述
使用廣度優先搜尋遍歷樹,輸出一個結果儲存在陣列中。
2. 分析
- 加入新結點到佇列中
- pop一個結點,加入到結果陣列中
- append當前結點的所有孩子結點到佇列中
- 重複2-3
- 什麼時候停?當佇列中所有的結點都被pop完畢。
3. 程式碼
時間複雜度: O(V+E)
空間複雜度: O(V) 當孩子結點都在Level 1 上的時候,我們需要把 V-1個孩子結點一起加入佇列中。
class Node: def __init__(self, name): self.children = [] self.name = namedef 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 currfor 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; } } }