我已经编写了深度优先搜索算法,但是它从树的右侧向左搜索。我可以从代码中看到它为什么这样做,但我无法想出一个解决方案来更改它,以便从左到右进行搜索。DFS算法正在从右向左搜索
public class DFS {
public LinkedList<Node> search(Node root, Node target) {
LinkedList<Node> open = new LinkedList<>();
LinkedList<Node> closed = new LinkedList<>();
open.addLast(root);
while (!open.isEmpty()) {
Node current = open.removeFirst();
if (current.equals(target)) {
closed.addLast(current);
return closed;
}
else {
ArrayList<Node> 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。
编辑
这里是节点类:
public class Node {
private ArrayList<Node> children;
private String name;
public Node(String name){
children = new ArrayList<Node>();
this.name = name;
}
public ArrayList<Node> getChildren(){
return new ArrayList<Node>(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);
}
}
你为什么要做'children.remove(child)',特别是在'children'循环中? – user2357112
既然你指出了,我不知道它的目的是什么!基本上我只是想放弃那个节点。我现在将编辑我的代码 – KOB
@ user2357112固定。 – KOB