Ciao a tutti. Ennesimo problema per me, stavolta con gli alberi.
Il concetto generale degli alberi mi è ben chiaro, avendoli già studiati in java.
Tuttavia, ho ancora dei problemi.

Per esempio, in questo problema devo visualizzare in ordine decrescente di frequenza le stringhe dell'albero.
Ogni nodo è così strutturato
codice:
struct tnode
{
	char *word; //la parola da memorizzare
	int count; //il numero di occorrenze della parola
	struct tnode *left; //un puntatore al nodo figlio sinistro
	struct tnode *right; //e uno al destro
};
L'aggiunta di una parola all'albero riesco a gestirla bene, stessa cosa per quanto riguarda la stampa in ordine lessicografico delle parole. L'albero è fatto in modo che ogni nodo sinistro contiene solo parole lessicograficamente minori del nodo padre ed ogni nodo destro quelle maggiori.

Come faccio, a questo punto, a stampare invece non in base all'ordine lessicografico, ma a quello delle occorrenze di una data parola?
Ho provato in vari modi, ma tutti sbagliati :S. Eccone uno; in questo esempio la funzione searchmax cerca il valore massimo nella funzione, treeprintn dovrebbe stampare tutti i valori che hanno n occorrenze, mentre treeprintcount si occupa di passare i giusti valori alla funzione precedente.
Mentre la funzione di ricerca funziona alla perfezione, sulle altre due ho parecchi dubbi; eseguendo il programma, infatti, viene stampato solo il valore massimo.

codice:
void treeprintn(struct tnode *p, int n)
{
	if (p != NULL && (p->count) == n)
	{
		printf("%3d %s\n", p->count, p->word);
		treeprintn(p->left, n);
		treeprintn(p->right, n);
	}
}

void treecountprint(struct tnode *p)
{
	int max = searchmax(p, 0);
	int i = 1;
	while (i <= max && p != NULL)
	{
		treeprintn(p, i);
		i++;
	}	
}

int searchmax(struct tnode *p, int max)
{
	if (p != NULL)
	{
		if ((p->count) > max)
			max = p->count;
		max = searchmax(p->left, max);
		max = searchmax(p->right, max);	
	}
	
	return max;
}
Ogni sorta di consiglio o suggerimento è sempre ben accetto