PDA

Visualizza la versione completa : [C++] Procedura su alberi con stampa crescente e decrescente


wgd-developer
03-06-2008, 17:43
salve, ho questa procedura che mi stampa i dati di un albero ordinato in maniera ordinata crescente...

void InOrderCD(Tnodo A) {
if (A!=NULL) {

InOrderCD(A->left);
cout<<A->key<<endl;
InOrderCD(A->right);

}
}

ora io dovrei effettuare la stampa sia in maniera crescente che decrescente...
come posso ottimizzare questa procedura ed effettuare questa stampa sfruttanto la chiamata di PUSH E POP ?

grazie

wgd-developer
09-06-2008, 19:25
nessuno aiutino?

Vincenzo1968
10-06-2008, 02:39
Ciao wgd,



typedef struct tagTree
{
int data;
struct tagTree *left;
struct tagTree *right;
} Tree;

/* Stampa l'albero in ordine crescente */
void InOrder(Tree * p)
{
Tree *temp;

Tree *stack[MAX_STACK];
int top;
top = -1;

if ( !p )
return;

temp = p;

while ( 1 )
{
if ( temp != NULL )
{
if ( top < MAX_STACK )
{
stack[++top] = temp; // Push
temp = temp->left;
}
else
{
printf("Errore: lo stack e' pieno.\n");
return;
}
}
else
{
if ( top >= 0 )
{
temp = stack[top--]; // Pop
printf("%d\n", temp->data);
temp = temp->right;
}
else
{
break;
}
}
}
}

/* Stampa l'albero in ordine decrescente */
void ReverseInOrder(Tree * p)
{
Tree *temp;

Tree *stack[MAX_STACK];
int top;
top = -1;

if ( !p )
return;

temp = p;

while ( 1 )
{
if ( temp != NULL )
{
if ( top < MAX_STACK ) // Push
{
stack[++top] = temp;
temp = temp->right;
}
else
{
printf("Errore: lo stack e' pieno.\n");
return;
}
}
else
{
if ( top >= 0 )
{
temp = stack[top--]; // Pop
printf("%d\n", temp->data);
temp = temp->left;
}
else
{
break;
}
}
}
}


La prima funzione utilizza uno stack per l'attraversamento dell'albero in ordine crescente. La seconda, ReverseInOrder, simmetrica alla prima.

Loading