Comment mettre en œuvre depth-first search (DFS) sur un arbre binaire en java?
Selon ce qui est expliqué dans l'article de wikipedia sur la profondeur de recherche, je pense que DFS sur un arbre binaire est identique à une précommande de la traversée de la racine--gauche-droite (ai-je le droit?).
Mais j'ai juste fait un peu de recherche et a obtenu ce code, dont l'auteur affirme que DFS a besoin d'un arbre à enregistrer si le nœud a été visité avant (ou avons-nous besoin de cela dans le cas d'un graphe?).
//copyright belongs to the original author
public void dfs() {
//DFS uses Stack data structure
Stack stack = new Stack();
stack.push(this.rootNode);
rootNode.visited=true;
printNode(rootNode);
while(!stack.isEmpty()) {
Node node = (Node)s.peek();
Node child = getUnvisitedChildNode(n);
if(child != null) {
child.visited = true;
printNode(child);
s.push(child);
}
else {
s.pop();
}
}
//Clear visited property of nodes
clearNodes();
}
Quelqu'un pourrait-il m'expliquer cela?
OriginalL'auteur Accessdenier | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
Oui, il est en précommande. Mais, je n'aime pas vraiment dire que son un parcours depuis que vous pourriez ne pas parcourir l'arbre, de vous arrêter dès que vous trouvez votre élément. Le programme que vous avez imprimé n'est pas une recherche, c'est un parcours : vous avez l'impression de tout. Une fonction de recherche dans un arbre binaire serait :
J'ai modifié la réponse générale des arbres.
OriginalL'auteur bruce_ricard
Profondeur d'abord de recherche peuvent être pré-, en-, ou post-ordre de la traversée. Vous n'avez pas besoin d'une pile: il est plus facile à mettre en œuvre de manière récursive, dans ce cas, vous n'avez pas besoin de marquer les nœuds que la visite soit.
OriginalL'auteur user207421