我用 Java 为树编写了以下 BFS:
public class Node
{
public int value;
public ArrayList<Node> myChildren = new ArrayList<Node>();
public Node(int v)
{
value = v;
}
}
public Node breadthFirstSearch(Node root, int value)
{
if(root == null) return null;
Queue<Node> nodesToVisit = new LinkedList<Node>();
nodesToVisit.add(root);
while(nodesToVisit.size() > 0)
{
Node currentNode = nodesToVisit.remove();
if(currentNode.value == value) return currentNode;
nodesToVisit.addAll(currentNode.myChildren);
}
return null;
}
我的问题是,当我“访问”节点时(就运行时复杂性或其他因素而言)是否重要if(currentNode.value == value)
。我可以在将节点从队列中弹出之后访问该节点,也可以在将其放入队列之前访问该节点。