Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 深度优先搜索/广度优先搜索易于实现 List unvisited=node.getChildren();_Java_Depth First Search_Breadth First Search - Fatal编程技术网

Java 深度优先搜索/广度优先搜索易于实现 List unvisited=node.getChildren();

Java 深度优先搜索/广度优先搜索易于实现 List unvisited=node.getChildren();,java,depth-first-search,breadth-first-search,Java,Depth First Search,Breadth First Search,DFS: while(!unvisited.isEmpty()){ 树节点=未访问。删除(0); //搜索节点 unvisited.addAll(0,node.getChildren()); } BFS: while(!unvisited.isEmpty()){ 树节点=未访问。删除(0); //搜索节点 unvisited.addAll(node.getChildren()); } 这些实现是否过于简单而不真实?想知道我是不是遗漏了什么 这些实现是否过于简单而不真实?我想知道我是不是 遗漏

DFS:

while(!unvisited.isEmpty()){
树节点=未访问。删除(0);
//搜索节点
unvisited.addAll(0,node.getChildren());
}
BFS:

while(!unvisited.isEmpty()){
树节点=未访问。删除(0);
//搜索节点
unvisited.addAll(node.getChildren());
}
这些实现是否过于简单而不真实?想知道我是不是遗漏了什么

这些实现是否过于简单而不真实?我想知道我是不是 遗漏了什么


您的实现是正确的。

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

BFS伪代码:


也可以考虑使用DEQE代替列表。请参阅:

@jlordo抱歉,我错过了上面的声明。别理我!是的,上述实现仅适用于非循环图。然而,您的回答也揭示了扩展到循环图所需的修改。谢谢
List<Tree<T>> unvisited = node.getChildren();
while (!unvisited.isEmpty()) {
   Tree<T> node = unvisited.remove(0);
   //search node
   unvisited.addAll(0, node.getChildren());
}
while (!unvisited.isEmpty()) {
   Tree<T> node = unvisited.remove(0);
   //search node
   unvisited.addAll(node.getChildren());
}