ΠΟΛΥΤΕΧΝΕΙΟ
ΚΡΗΤΗΣ Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών ΛΟΓ 201: Τεχνολογία Λογισμικού
ΙΙ |
Μια σύντομη περιγραφή των δένδρων δυαδικής αναζήτησης δίνεται στην εκφώνηση της άσκησης. Εκτενέστερες περιγραφές μπορείτε να βρείτε σε βιβλία δομών δεδομένων.
Η σύγκριση των τιμών γίνεται με τον τελεστή <
ο οποίος υποθέτουμε
ότι υποστηρίζεται από τον τύπο T
.
Η προσθήκη στοιχείων σε ένα δένδρο δυαδικής αναζήτησης μπορεί να γίνει εύκολα με αναδρομικό τρόπο:
Οι τιμές αντιγράφονται στα δένδρα, επομένως υποθέτουμε επίσης ότι ο τύπος T
διαθέτει copy constructor. Η άσκηση δε ζητάει να γίνεται κανενός είδους "ζύγισμα"
των δένδρων.
Η υλοποίηση της μεθόδου print
μπορεί να γίνει αναδρομικά με απλό
τρόπο:
Οι iterators που ζητείται να υλοποιηθούν ανήκουν σε δυο μεγάλες κατηγορίες:
Στην πρώτη κατηγορία, διακρίνουμε τρεις τρόπους διάσχισης:
Το παράδειγμα στο τέλος της εκφώνησης της άσκησης 3 περιγράφει όλους τους ζητούμενους τρόπους διάσχισης. Η υλοποίησή τους είναι εύκολο να γίνει αναδρομικά.
Ένας απλός τρόπος υλοποίησης των iterators είναι ο ακόλουθος. Μπορείτε να ενσωματώσετε
μια ουρά κόμβων σε κάθε iterator, την οποία θα γεμίζετε στον constructor χρησιμοποιώντας
την αναδρομική υλοποίηση των τρόπων διάσχισης. Στη συνέχεια, οι μέθοδοι get
και current
θα βλέπουν μόνο την ουρά και θα επιστρέφουν στοιχεία
από αυτήν.
Για τη διευκόλυνσή σας, μπορείτε να χρησιμοποιήσετε στη λύση της άσκησης τα ακόλουθα templates:
Queue<T>
: υλοποίηση ουράς, αρχείο queue.hppStack<T>
: υλοποίηση στοίβας, αρχείο stack.hpp
: υλοποίηση, αρχείο boolean.hppΗ χρήση των παραπάνω δεν είναι υποχρεωτική, επίσης δεν είναι απαραίτητο να χρησιμοποιήσετε και τα δύο.
Τα templates των iterators θα πρέπει να κληρονομούν το βασικό αφηρημένο template BinaryTreeIterator<T>. Αυτό σημαίνει ότι θα έχετε:
template <class T> class InfixIterator : public BinaryTreeIterator<T>
... template <class T> class PrefixIterator : public BinaryTreeIterator<T> ... template <class T> class PostfixIterator : public BinaryTreeIterator<T> ... template <class T> class BFSIterator : public BinaryTreeIterator<T> ...
Ο κώδικας που δίνεται θα πρέπει να μπορεί να ενσωματωθεί στο πρόγραμμά σας όπως ακριβώς είναι και να εκτυπώνει τα αποτελέσματα που δίνονται στην εκφώνηση.
nickie@softlab.ntua.gr
).
5/4/2000
.