[C++]Visita di un albero binario
Salve a tutti, mi sto avventurando nel modo delle strutture dati un po' più complicate e devo sviluppare un programma che permette una visita per livelli di un albero binario... ho gia un programma che effettua le visite in preordine, postordine e simmetrica e devo aggiungere la visita per livelli (o in ampiezza). Il programma che già ho è formato dai file:
TreeNode.h
Tree.h
main.cpp
per implementare la visita per livelli ho bisogno della classe Coda e quindi devo aggiungere anche i file:
ListNode.h
List.h
Queue.h
Di seguito vi mostro tutti i file:
ListNode.h
List.h
Queue.h
TreeNode.h
Tree.h
main.cpp
Per quanto riguarda la funzione della visita per livelli ho capito il procedimento che bisogna seguire: in pratica si utilizza un oggetto coda, si inserisce nella coda il nodo radice, poi finchè la coda non è vuota viene estratto il nodo che è in testa alla coda e viene visualizzato, se il puntatore del figlio di sinitra è diverso da NULL si inserisce nela coda il nodo di sinistra e analogo procedimento con il figlio di destra:
in Tree.h includo il file Queue.h e inserisco le funzioni membro levelOrderTraversal() e levelOrderHelper() all'interno della classe; l'implementazione che ho fatto però mi dà alcuni errori:
gli errori sono nel file Queue.h
e nel file Tree.h
in realtà credo che non sia solo l'algoritmo ad essere sbagliato, ma anche l'intera strutturazione del programma... oltre all'algoritmo in sè qualcuno mi darebbe una mano a capire in queste situazioni qual è la giusta sintassi delle inclusioni e delle implementazioni dei template? Grazie mille a tutti.
TreeNode.h
Tree.h
main.cpp
per implementare la visita per livelli ho bisogno della classe Coda e quindi devo aggiungere anche i file:
ListNode.h
List.h
Queue.h
Di seguito vi mostro tutti i file:
ListNode.h
List.h
Queue.h
TreeNode.h
Tree.h
main.cpp
Per quanto riguarda la funzione della visita per livelli ho capito il procedimento che bisogna seguire: in pratica si utilizza un oggetto coda, si inserisce nella coda il nodo radice, poi finchè la coda non è vuota viene estratto il nodo che è in testa alla coda e viene visualizzato, se il puntatore del figlio di sinitra è diverso da NULL si inserisce nela coda il nodo di sinistra e analogo procedimento con il figlio di destra:
in Tree.h includo il file Queue.h e inserisco le funzioni membro levelOrderTraversal() e levelOrderHelper() all'interno della classe; l'implementazione che ho fatto però mi dà alcuni errori:
gli errori sono nel file Queue.h
there are no arguments to 'isEmpty' that depend on a template parameter, so a declaration of 'isEmpty' must be available there are no arguments to 'print' that depend on a template parameter, so a declaration of 'print' must be available
e nel file Tree.h
no matching function for call to 'Queue<TreeNode<int>*>::dequeue()'
in realtà credo che non sia solo l'algoritmo ad essere sbagliato, ma anche l'intera strutturazione del programma... oltre all'algoritmo in sè qualcuno mi darebbe una mano a capire in queste situazioni qual è la giusta sintassi delle inclusioni e delle implementazioni dei template? Grazie mille a tutti.
Risposte
nessuno può aiutarmi?
Ad occhio, direi che manca in:
Tree.h:
#include "Queue.h"
visto che chiami le funzioni nella visita per livelli.
L'algoritmo mi pare sia corretto, ma al primo colpo mi sembrava ci fosse qualcosa che non andava, controllando meglio direi che è corretto.
Tree.h:
#include "Queue.h"
visto che chiami le funzioni nella visita per livelli.
L'algoritmo mi pare sia corretto, ma al primo colpo mi sembrava ci fosse qualcosa che non andava, controllando meglio direi che è corretto.
Scusa ham_burst, grazie mille per aver risposto, in realtà è stato un mio errore nel trascrivere il programma, infatti l'avevo già incluso "Queue.h" ma involontariamente l'ho cancellato quando ho trascritto il tutto qui... (ora ho corretto il post)... il problema quindi mi rimane e mi scuso ancora...
Gli argomenti come il template e gli algoritmi del programma bene o male li ho capiti, ma ora mi ritrovo per la prima volta ad includere tutti questi file e quindi ad unire tutte questi template di classi... in pratica mi ritrovo ad usare tutte queste strutture dati insieme e ho difficoltà nell'implementazione... grazie ancora, spero in un aiutino
Gli argomenti come il template e gli algoritmi del programma bene o male li ho capiti, ma ora mi ritrovo per la prima volta ad includere tutti questi file e quindi ad unire tutte questi template di classi... in pratica mi ritrovo ad usare tutte queste strutture dati insieme e ho difficoltà nell'implementazione... grazie ancora, spero in un aiutino

Ma allora quali sono gli errori che ti derivano dalla compilazione?
Se hai copi-incollato sbagliato, tipo l'ultimo errore non dovrebbe esserci se avevi già insertio l'header corretto...
Se hai copi-incollato sbagliato, tipo l'ultimo errore non dovrebbe esserci se avevi già insertio l'header corretto...
Gli errori sono erano sempre quelli, comunque stamattina ho concentrato la mia attenzione esclusivamente nel comprendere questo esercizio e sono arrivato alla conclusione... in pratica i primi due errori erano dovuti al fatto che non avevo un implementazione delle funzioni della classe Coda, mentre il secondo errore era dovuto al fatto che la funzione dequeue(), così come l'ho definita nella classe Coda è di tipo bool e inoltre ha un parametro nel prototipo e quindi era completamente sbagliata l'istruzione
Per quanto riguarda il primo errore ho eliminato il file List.h e ho modificato i file ListNode.h e Queue.h, ridefinendo al meglio le funzioni che mi servivano; poi per il secondo errore ho aggiustato l'algoritmo della visita per livelli sulla base delle funzioni che avevo definito.
Comunque sia ora funziona tutto alla perfezione, grazie mille ham_burst per le risposte (mi hanno incoraggiato perchè pensavo di aver sbagliato tutto
)
Questo forum è fantastico... alla prossima! Ciaooo!
traverse = queue.dequeue();
Per quanto riguarda il primo errore ho eliminato il file List.h e ho modificato i file ListNode.h e Queue.h, ridefinendo al meglio le funzioni che mi servivano; poi per il secondo errore ho aggiustato l'algoritmo della visita per livelli sulla base delle funzioni che avevo definito.
Comunque sia ora funziona tutto alla perfezione, grazie mille ham_burst per le risposte (mi hanno incoraggiato perchè pensavo di aver sbagliato tutto

Questo forum è fantastico... alla prossima! Ciaooo!
