Προς το περιεχόμενο

delete a binary tree in C


Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, έχω  ενα θεμα με την διαγραφή ολόκληρου του δενδρου που έχω δημιουργήσει.Έχω την παρακάτω συνάρτηση που την καλώ στην main και της δίνω σαν όρισμα την διεύθυνση της ρίζας.η συναρτηση ειναι :

 

freeTree(komvos* newnode)      ///sthn prwth klhsh to newnode einai iso me ton root
{
   if(newnode==NULL) return ;
   freeTree(newnode->left);
   freeTree(newnode->right);
   free(newnode);
}//end of freeTree
 
χρησιμοποιώ μετά-διατεταγμένη διέλευση και κάνω free τον κάθε κόμβο.για κάποιο λόγο ομως δεν γινετε σωστα η διαγραφή αφου την κάλω και στην συνέχεια  καλώ μια άλλη σύνάρτηση για την εκτύπωση του δενδρου και μου εκτυπωνει κανονικα οτι εχει μεσα ο κάθε κόμβοσ εκτως απο μία σιμβολοσειρά τι εχω κανω λάθως εδώ.?  
 
Δημοσ.

Η μνημη απο το πρπγραμμα απελευθερωνεται, αλλα τα δεδομενα συνεχιζουν να ειναι οπως ηταν (μονο αν ξαναδεσμευτει η μνημη και γραφτει θα αλλαξουν). Εφ εσον εσυ (κακως) κρατας τις διευθυνσεις της απελευθερωμενης μνημης, μπορεις κι τη διαβαζεις.

Πιθανη λυση:

 

 

freeTree(komvos* newnode)      ///sthn prwth klhsh to newnode einai iso me ton root
{
   if(newnode==NULL) return ;
   freeTree(newnode->left);

   freeTree(newnode->right);



   newnode->left = newnode->right = NULL;

   free(newnode);

   newnode = NULL;

}//end of freeTree

 

 

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...