我编写了深度优先搜索算法,但是它从树的右侧向左侧搜索 . 我可以从我的代码中看到它为什么会这样做,但是我无法想出一个改变它的解决方案,以便从左到右进行搜索 .
public class DFS {
public LinkedList search(Node root, Node target) {
LinkedList open = new LinkedList<>();
LinkedList closed = new LinkedList<>();
open.addLast(root);
while (!open.isEmpty()) {
Node current = open.removeFirst();
if (current.equals(target)) {
closed.addLast(current);
return closed;
}
else {
ArrayList children = current.getChildren();
closed.addLast(current);
for (Node child : children) {
if (!open.contains(child) && !closed.contains(child)) {
open.addFirst(child);
}
}
}
}
return null;
}
}
closed 是按访问顺序访问的节点列表 .
Node.getChildren() 按照添加顺序返回节点子节点的ArrayList .
EDIT
这是节点类:
public class Node {
private ArrayList children;
private String name;
public Node(String name){
children = new ArrayList();
this.name = name;
}
public ArrayList getChildren(){
return new ArrayList(children);
}
public Node addChild(Node child){
children.add(child);
return child;
}
public void removeChild(Node child){
children.remove(child);
}
public String getName() {
return name;
}
public boolean equals(Node other){
return (this.getName().compareTo(other.getName())==0);
}
}