Je viens de mettre en place un arbre fileté en C++, et maintenant j'essaie de cout
tous les éléments dans l'ordre.C++ - arbre fileté, traversée ordonnée
L'arbre était un arbre trié binaire (non équilibré) avant que je l'ai enfilé.
J'ai essayé de faire ceci:
E min = _min(root); //returns the minimum element of the tree
E max = _max(root); //returns the maximum element of the tree
while (min != max)
{
std::cout << min << ", ";
min = _successor(root, min);
}
std::cout << max << ", ";
std::cout << std::endl;
mais depuis l'arbre est maintenant enfilé, ma fonction successeur retourne toujours le minimum de l'arbre entier (en gros, il va une fois dans le sous-arbre droit, puis va dans le sous-arbre de gauche autant de fois que possible, jusqu'à ce qu'il trouve une feuille.) Donc quand j'essaie d'appeler cette fonction, il faut seulement cout
1 (parce que 1 est la valeur minimale de mon arbre).
Aussi, j'ai essayé quelque chose d'autre:
E min = _min(root); //returns min element of the tree
E max = _max(root); //returns max element of the tree
Node* tmp = _getNode(root, min); //returns the node of the specified element, therefore the minimum node of the tree
while(tmp->data < max)
{
std::cout << tmp->data << ", ";
tmp = _getNode(root, tmp->data)->rightChild; //gets the right child node of tmp
}
std::cout << tmp->data << ", ";
Cependant, en faisant cela, il y a des valeurs qui sont ignorées. (Voir image ci-dessous)
(liens verts ont été ajoutés après le filetage de l'arbre.) Si vous voyez, par exemple, le nœud # 6 ne reçoit la visite du dernier algorithme, parce que ce n'est pas droit de l'enfant d'un nœud dans l'arbre ...
est ici la sortie de la fonction précédente:
1, 2, 3, 5, 7, 8, 11, 71
est-ce que quelqu'un a une idée de la façon dont je pouvais résoudre ce problème, ou des conseils pour mon problème?
Merci
EDIT: Après tout ce que je viens d'avoir à traverser l'arbre du minimum au maximum et modifier mes méthodes de _predecessor et _successor, donc ils ne vérifierait pas dans les sous-arbres qui sont filetés. :)
Espérons que cela aidera les futurs lecteurs.
Je ne pense pas que votre image soit totalement correcte. Je pense que le lien de gauche de 8 devrait être un fil de retour à 7. De même, 9 devrait avoir un fil de gauche à 8. –
Vous avez raison, je l'ai réparé. – Pacane