View Full Version : Alberi n-ari ordinati: algoritmo di inserimento
3lisinfor
17-06-2020, 15:30
Buongiorno a tutti, ho provato a implementare un algoritmo in C++ di inserimento ricorsivo per alberi generici ordinati. Vorrei sapere se qualcuno potrebbe dirmi se è corretto e eventualmente spiegarmi cosa c'è che non va.
Grazie in anticipo a chi cercherà di aiutarmi :D
struct Nodo{
int info;
Nodo *next;
}
Nodo* inserisci(Nodo *pnodo, int el){
if(pnodo == NULL)
pnodo = new Nodo;
pnodo->info = el;
else {
if (pnodo-> info > el)
pnodo-> next = inserisci(Nodo *pnodo->next, el);
else
return pnodo;
}
}
wingman87
17-06-2020, 21:04
Non è corretto per molti motivi.
Il primo che mi viene in mente è che la struttura che hai definito non è un albero.
Il secondo è che è sintatticamente errato, non dovrebbe compilare per via dei path senza return e perché il primo else non segue un if: mancano le graffe per racchiudere le due istruzioni dopo il primo if, scritto in questo modo solo la prima istruzione è dentro all'if, la seconda è fuori dall'if e l'else non segue un if.
3lisinfor
17-06-2020, 23:04
Sisi l'indentazione è errata lo so bene, diciamo che questo era solo una bozza non corretta. Ovviamente manca la funzione di creazione, di stampa ecc ma la mia domanda si riferiva esclusivamente all'algoritmo di inserimento.
wingman87
18-06-2020, 08:56
I problemi che ti ho indicato sono piuttosto gravi e non riguardano l'indentazione e le altre funzioni.
Il metodo di inserimento che hai scritto somiglia all'inserimento ordinato in una lista ma sarebbe anche in questo caso scorretto, sia dal punto di vista della sintassi per i motivi che dicevo sia dal punto di vista della semantica... è incompleto.
Non riesco ad aiutarti di più di così, sì potrei scriverti il codice corretto ma cosa impareresti? Cerca di usare le indicazioni che ti ho dato per riflettere su quello che hai scritto. Il fatto che la struttura che hai definito non sia un albero è piuttosto lampante, se non te ne convinci non penso tu possa proseguire.
Credo personalmente che, prima di scrivere direttamente codice, dovresti ragionare in termini di logica e pseudocodice.
In primis se è un albero (parliamo di un albero binario per comodità) , avrà un ramo (figlio) destro o sinistro.
Per come hai implementato la struttura, sembra più un array di struct che fa.. non capisco bene cosa.
Quindi fai un po di pseudocodice del tipo
Struttura Albero{
Valore int;
albero destro;
albero sinistro;
}
e via così...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.