深度优先搜索/广度优先搜索易于实现

时间:2013-05-04 19:19:39

标签: java depth-first-search breadth-first-search

List<Tree<T>> unvisited = node.getChildren();

DFS:

while (!unvisited.isEmpty()) {
   Tree<T> node = unvisited.remove(0);
   //search node
   unvisited.addAll(0, node.getChildren());
}

BFS:

while (!unvisited.isEmpty()) {
   Tree<T> node = unvisited.remove(0);
   //search node
   unvisited.addAll(node.getChildren());
}

这些实现太简单了吗?想知道我是否遗漏了什么?

2 个答案:

答案 0 :(得分:2)

除非仅限于非循环图,否则您将在未访问的列表中找到重复的节点,因为您尚未标记受访节点。您需要迭代子项列表并在添加到树之前标记它们。

BFS伪代码:http://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode

您也可以考虑使用Deque代替List。请参阅:http://docs.oracle.com/javase/7/docs/api/java/util/Deque.html

答案 1 :(得分:1)

  

这些实现太简单了吗?想知道我是不是   遗失了什么?

您的实施是正确的。