Stampa il sottoalbero di un valore X presente in un albero

di il
5 risposte

Stampa il sottoalbero di un valore X presente in un albero

Buonasera a tutti ragazzi, da un po' ho iniziato a studiarae gli Alberi Binari, e di conseguenza a scrivere funzioni ricorsive.
Oggi, dopo un bel po' di esercizi, mi son bloccato e vi pongo subito il testo:
Scrivi una funzione che, dato un elemento di un albero binario, visualizzi il sottoalbero che ha tale elemento come radice.
Parto col dirvi che ho già scritto una funziona per la stampa in pre-order: pOrder(Albero* root)

Questa invece è la funzione che richiede l'esercizio:
void printSubtree(Albero* root, int key_toFind)
{
	if (root == nullptr) //Se inesistente
		return;
	if (root->info == key_toFind) //Valore trovato
	{
		pOrder(root); //Chiama la funzione per la stampa in pre-order, passando la radice-chiave
		return;
	}
	
	printSubtree(root->left, key_toFind);
	printSubtree(root->right, key_toFind);
}
Nel caso che il valore non venga trovato, la funzione viene richiamata prima a sinistra e poi a destra.
printSubtree(root->left, key_toFind);
printSubtree(root->right, key_toFind);
Il problema è che se arrivo a questo punto printSubtree(root->left, key_toFind) e trovo la radice-chiave, dopo aver richiamato pOrder(root), continua poi con printSubtree(root->right, key_toFind), con il rischio che trova un altro valore uguale e stampa un secondo, o terzo... sottoalbero.
Consigli su come fermare il tutto dopo aver stampato il primo sottoalbero?

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte