Le titre de la question ne parle pas de l'absence d'un "parent" pointeur sur le nœud. Bien qu'il n'est pas nécessairement requis pour la STB, de nombreux arbres binaires mises en œuvre n'ont un parent, un pointeur.
la classe Node {
Noeud* gauche;
Noeud* droit;
Noeud* parent;
De DONNÉES;
};
C'est le cas, l'imagerie d'un diagramme de l'arbre sur le papier, et dessiner avec un crayon autour de l'arbre, va en haut et en bas, des deux côtés de la bords (lors de la descente, vous serez à gauche de l'arête, et quand vous serez sur le côté droit). Fondamentalement, il y a 4 états:
- Sud-ouest: Vous êtes sur le côté gauche de l'arête, en allant du parent gauche de son enfant
- Nord-est: passer de l'une à gauche de l'enfant, de retour à son parent
- Sud-est: à partir d'un parent à un enfant
- Nord-ouest: à partir d'un droit de l'enfant, de retour à son parent
Traverse( Node* node )
{
enum DIRECTION {SW, NE, SE, NW};
DIRECTION direction=SW;
while( node )
{
// first, output the node data, if I'm on my way down:
if( direction==SE or direction==SW ) {
out_stream << node->data;
}
switch( direction ) {
case SW:
if( node->left ) {
// if we have a left child, keep going down left
node = node->left;
}
else if( node->right ) {
// we don't have a left child, go right
node = node->right;
DIRECTION = SE;
}
else {
// no children, go up.
DIRECTION = NE;
}
break;
case SE:
if( node->left ) {
DIRECTION = SW;
node = node->left;
}
else if( node->right ) {
node = node->right;
}
else {
DIRECTION = NW;
}
break;
case NE:
if( node->right ) {
// take a u-turn back to the right node
node = node->right;
DIRECTION = SE;
}
else {
node = node->parent;
}
break;
case NW:
node = node->parent;
break;
}
}
}