1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 | /** * \file BST.h * \brief Classe d�finissant un arbre du laboratoire#8 * \author Abder * \version 0.1 * \date mai 2009 * * Definition de la classe Arbre et de ses m�thodes de parcours * */ #ifndef _BST #define _BST #pragma warning( disable : 4290 ) #include <stdexcept> #include <iostream> #include <vector> #include <queue> namespace Arbre_Lab8 { /** * \class Graphe * * \brief classe g�n�rique repr�sentant un arbre * * La classe g�re un arbre g�n�rique. L'impl�mentation * se fait par cha�nage. */ template <typename E> class Arbre { public: /** * \brief Constructeur #1 par d�faut * * \post Une instance de la classe Arbre est initialis�e * */ Arbre(){racine = 0;} /** * \brief Constructeur#2 � partir des tableaux de visite sym�trique et au p�re * * \pre Il faut qu'il y ait suffisamment de m�moire * * \post l'arbre dont les visites sym�trique et au p�re sont contenus * respectivement dans les tableaux tabS et *ptr est construit * * \exception bad_alloc s'il n'y a pas assez de m�moire */ Arbre(E *tabS, int debut, int fin, E **ptr, int & card) throw(std::bad_alloc); /** * \brief Constructeur de copie * * \pre Il faut qu'il y ait suffisamment de m�moire * * \post une copie profonde de l'arbre source est instanci�e * * \exception bad_alloc s'il n'y a pas assez de m�moire */ Arbre(const Arbre& source) throw(std::bad_alloc) {_auxCopier(source.racine,racine);} /** * \brief Destructeur * * \post l'instance de Graphe est d�truite */ ~Arbre() {_auxDetruire(racine);} /** * \brief Lister un arbre * * Le listage se fait en aprcourant l'arbre en ordre (parcours sym�trique) * * \pre Il y a assez de m�moire * * \post L'arbre est inchang� * * \exception bad_alloc s'il n'y a pas assez de m�moire * */ void lister(std::vector<E>&) const throw(std::bad_alloc); /** * \brief Parcourir en Pr�-Ordre un arbre (priorit� au p�re) * * \post L'arbre est inchang� * */ void parcourirPreOrdre(void (* traitement)(E &iteme)) const; /** * \brief Parcourir un arbre par niveau * * \post L'arbre est inchang� * */ void parcourirParNiveau(void (* traitement)(E &iteme)) const; private: /** * \class Noeud * * \brief classe interne repr�sentant un noeud typique de l'arbre * * La classe repr�sente un noeud typique * pour impl�menter un arbre par cha�nage. */ class Noeud { public: E data; /*!< La donn�e dans l'arbre*/ Noeud *gauche; /*!< Pointeur vers le fils gauche*/ Noeud *droite; /*!< Pointeur vers le fils droit*/ /** * \brief Constructeur de la classe Noeud * * \post un noeud typique est intialis� * */ Noeud( const E&d ): gauche( 0 ), data( d ), droite( 0 ) { } }; // Les membres donn�es Noeud * racine; /*!< La racine de l'arbre*/ // Les membres fonctions priv�s // Les auxiliaires r�cursifs // pour l'insertion et les diff�rents parcours, /** * \brief Parcourir en En-Ordre un sous-arbre * * Fonction r�cursive auxiliaire pour la m�thode lister(). * * \post Le sous-arbre est inchang� * */ //void _auxEnOrdre(Noeud*, std::vector<E>&) const; /** * \brief Copier deux sous-arbre * * Fonction r�cursive auxiliaire pour le constructeur de copie * * \post Le sous-arbre source est inchang� * */ void _auxCopier( Noeud *, Noeud*&) throw (std::bad_alloc); /** * \brief D�truire un sous-arbre * * Fonction r�cursive auxiliaire pour le destructeur * * \post Le sous-arbre est d�truit * */ void _auxDetruire(Noeud * &t); /** * \brief Parcourir en Pre-Ordre un sous-arbre * * Fonction r�cursive auxiliaire pour le parcours en pr�-ordre * * \post Le sous-arbre est inchang� * */ void _auxPreOrdre(Noeud *,void (* traitement)(E&)) const; /** * \brief Construction d'un arbre � partir des tableaux de 2 visites (p�re et sym�trique) * * Fonction r�cursive auxiliaire pour le constructeur #2 * * \pre Il faut qu'il y ait suffisamment de m�moire * * \post Le sous-arbre construit est retourn� * * \exception bad_alloc s'il n'y a pas assez de m�moire */ Noeud * _auxPereSym(E *tabS, int debut, int fin, E **ptr, int &card) throw(std::bad_alloc); }; }//Fin du namespace #include "BST.inl" #endif |
LyoqCiAqIFxmaWxlIEJTVC5oCiAqIFxicmllZiBDbGFzc2UgZO+/vWZpbmlzc2FudCB1biBhcmJyZSBkdSBsYWJvcmF0b2lyZSM4CiAqIFxhdXRob3IgQWJkZXIKICogXHZlcnNpb24gMC4xCiAqIFxkYXRlIG1haSAyMDA5CiAqCiAqIERlZmluaXRpb24gZGUgbGEgY2xhc3NlIEFyYnJlIGV0IGRlIHNlcyBt77+9dGhvZGVzIGRlIHBhcmNvdXJzIAogKgogKi8KCiNpZm5kZWYgX0JTVAojZGVmaW5lIF9CU1QKCiNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQyOTAgKQojaW5jbHVkZSA8c3RkZXhjZXB0PgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxxdWV1ZT4KCm5hbWVzcGFjZSBBcmJyZV9MYWI4CnsKCgkvKiogCgkqIFxjbGFzcyBHcmFwaGUKCSoKCSogXGJyaWVmIGNsYXNzZSBn77+9bu+/vXJpcXVlIHJlcHLvv71zZW50YW50IHVuIGFyYnJlCgkqCgkqICBMYSBjbGFzc2UgZ++/vXJlIHVuIGFyYnJlIGfvv71u77+9cmlxdWUuIEwnaW1wbO+/vW1lbnRhdGlvbgoJKiAgc2UgZmFpdCBwYXIgY2hh77+9bmFnZS4KCSovIAoJdGVtcGxhdGUgPHR5cGVuYW1lIEU+CgljbGFzcyBBcmJyZQoJewoJcHVibGljOgoJCS8qKgoJCSAqICBcYnJpZWYgQ29uc3RydWN0ZXVyICMxIHBhciBk77+9ZmF1dAoJCSAqCgkJICogXHBvc3QgVW5lIGluc3RhbmNlIGRlIGxhIGNsYXNzZSBBcmJyZSBlc3QgaW5pdGlhbGlz77+9ZQoJCSAqIAoJCSAqLwoJCUFyYnJlKCl7cmFjaW5lID0gMDt9CgoJCS8qKgoJCSAqICBcYnJpZWYgQ29uc3RydWN0ZXVyIzIg77+9IHBhcnRpciBkZXMgdGFibGVhdXggZGUgdmlzaXRlIHN5be+/vXRyaXF1ZSBldCBhdSBw77+9cmUKCQkgKgoJCSAqIFxwcmUgSWwgZmF1dCBxdSdpbCB5IGFpdCBzdWZmaXNhbW1lbnQgZGUgbe+/vW1vaXJlCgkJICoKCQkgKiAgXHBvc3QgbCdhcmJyZSBkb250IGxlcyB2aXNpdGVzIHN5be+/vXRyaXF1ZSBldCBhdSBw77+9cmUgc29udCBjb250ZW51cyAKCQkgKgkJICByZXNwZWN0aXZlbWVudCBkYW5zIGxlcyB0YWJsZWF1eCB0YWJTIGV0ICpwdHIgZXN0IGNvbnN0cnVpdCAKCQkgKgoJCSAqICBcZXhjZXB0aW9uIGJhZF9hbGxvYyBzJ2lsIG4neSBhIHBhcyBhc3NleiBkZSBt77+9bW9pcmUKCQkgKi8KCQlBcmJyZShFICp0YWJTLCBpbnQgZGVidXQsIGludCBmaW4sIEUgKipwdHIsIGludCAmIGNhcmQpIHRocm93KHN0ZDo6YmFkX2FsbG9jKTsKCgkJLyoqCgkJICogIFxicmllZiBDb25zdHJ1Y3RldXIgZGUgY29waWUKCQkgKgoJCSAqIFxwcmUgSWwgZmF1dCBxdSdpbCB5IGFpdCBzdWZmaXNhbW1lbnQgZGUgbe+/vW1vaXJlCgkJICoKCQkgKiAgXHBvc3QgdW5lIGNvcGllIHByb2ZvbmRlIGRlIGwnYXJicmUgc291cmNlIGVzdCBpbnN0YW5jae+/vWUKCQkgKgoJCSAqICBcZXhjZXB0aW9uIGJhZF9hbGxvYyBzJ2lsIG4neSBhIHBhcyBhc3NleiBkZSBt77+9bW9pcmUKCQkgKi8KCQlBcmJyZShjb25zdCBBcmJyZSYgc291cmNlKSB0aHJvdyhzdGQ6OmJhZF9hbGxvYykge19hdXhDb3BpZXIoc291cmNlLnJhY2luZSxyYWNpbmUpO30KCgkJLyoqCgkJICogIFxicmllZiBEZXN0cnVjdGV1cgoJCSAqCgkJICogIFxwb3N0IGwnaW5zdGFuY2UgZGUgR3JhcGhlIGVzdCBk77+9dHJ1aXRlCgkJICovCgkJfkFyYnJlKCkge19hdXhEZXRydWlyZShyYWNpbmUpO30KCgkJCgkJLyoqICAgICAgICAgICAgICAgICAgICAgICAKCQkgKiAgXGJyaWVmIExpc3RlciB1biBhcmJyZQoJCSAqCgkJICogTGUgbGlzdGFnZSAgc2UgZmFpdCBlbiBhcHJjb3VyYW50IGwnYXJicmUgZW4gb3JkcmUgKHBhcmNvdXJzIHN5be+/vXRyaXF1ZSkKCQkgKgoJCSAqIFxwcmUgSWwgeSBhIGFzc2V6IGRlIG3vv71tb2lyZQoJCSAqCgkJICogXHBvc3QgTCdhcmJyZSBlc3QgaW5jaGFuZ++/vQoJCSAqCgkJICogXGV4Y2VwdGlvbiBiYWRfYWxsb2MgcydpbCBuJ3kgYSBwYXMgYXNzZXogZGUgbe+/vW1vaXJlCgkJICogCgkJICovCgkJdm9pZCBsaXN0ZXIoc3RkOjp2ZWN0b3I8RT4mKSBjb25zdCB0aHJvdyhzdGQ6OmJhZF9hbGxvYyk7IAoKCQkKCQkvKiogICAgICAgICAgICAgICAgICAgICAgIAoJCSAqICBcYnJpZWYgUGFyY291cmlyIGVuIFBy77+9LU9yZHJlIHVuIGFyYnJlIChwcmlvcml077+9IGF1IHDvv71yZSkgCgkJICoKCQkgKiBccG9zdCBMJ2FyYnJlIGVzdCBpbmNoYW5n77+9CgkJICogCgkJICovCgkJdm9pZCBwYXJjb3VyaXJQcmVPcmRyZSh2b2lkICgqIHRyYWl0ZW1lbnQpKEUgJml0ZW1lKSkgY29uc3Q7CgoJCS8qKiAgICAgICAgICAgICAgICAgICAgICAgCgkJICogIFxicmllZiBQYXJjb3VyaXIgdW4gYXJicmUgcGFyIG5pdmVhdSAKCQkgKgoJCSAqIFxwb3N0IEwnYXJicmUgZXN0IGluY2hhbmfvv70KCQkgKiAKCQkgKi8KCQl2b2lkIHBhcmNvdXJpclBhck5pdmVhdSh2b2lkICgqIHRyYWl0ZW1lbnQpKEUgJml0ZW1lKSkgY29uc3Q7CgoKCQlwcml2YXRlOgoJCS8qKiAKCQkqIFxjbGFzcyBOb2V1ZAoJCSoKCQkqIFxicmllZiBjbGFzc2UgaW50ZXJuZSByZXBy77+9c2VudGFudCB1biBub2V1ZCB0eXBpcXVlIGRlIGwnYXJicmUKCQkqCgkJKiAgTGEgY2xhc3NlIHJlcHLvv71zZW50ZSB1biBub2V1ZCB0eXBpcXVlCgkJKiAgcG91ciBpbXBs77+9bWVudGVyIHVuIGFyYnJlIHBhciBjaGHvv71uYWdlLgoJCSovCgkJY2xhc3MgTm9ldWQKCQl7CgkJICBwdWJsaWM6CgkJCUUgZGF0YTsJCQkvKiE8IExhIGRvbm7vv71lIGRhbnMgbCdhcmJyZSovCgkJCU5vZXVkICpnYXVjaGU7CS8qITwgUG9pbnRldXIgdmVycyBsZSBmaWxzIGdhdWNoZSovCgkJCU5vZXVkICpkcm9pdGU7CS8qITwgUG9pbnRldXIgdmVycyBsZSBmaWxzIGRyb2l0Ki8KCQkJLyoqICAgICAgICAgICAgICAgICAgICAgICAKCQkJICogXGJyaWVmIENvbnN0cnVjdGV1ciBkZSBsYSBjbGFzc2UgTm9ldWQKCQkJICoKCQkJICogXHBvc3QgdW4gbm9ldWQgdHlwaXF1ZSBlc3QgaW50aWFsaXPvv70KCQkJICogCgkJCSAqLwoJCQlOb2V1ZCggY29uc3QgRSZkICk6IGdhdWNoZSggMCApLCBkYXRhKCBkICksIGRyb2l0ZSggMCApIHsgfQoJCX07CgoJCS8vIExlcyBtZW1icmVzIGRvbm7vv71lcwoJCU5vZXVkICogcmFjaW5lOwkvKiE8IExhIHJhY2luZSBkZSBsJ2FyYnJlKi8KCQkKCQkvLyBMZXMgbWVtYnJlcyBmb25jdGlvbnMgcHJpdu+/vXMKCQkKCQkvLyBMZXMgYXV4aWxpYWlyZXMgcu+/vWN1cnNpZnMKCQkvLyBwb3VyIGwnaW5zZXJ0aW9uIGV0IGxlcyBkaWZm77+9cmVudHMgcGFyY291cnMsCgkJCgoJCS8qKiAgICAgICAgICAgICAgICAgICAgICAgCgkJICogIFxicmllZiBQYXJjb3VyaXIgZW4gRW4tT3JkcmUgdW4gc291cy1hcmJyZQoJCSAqCgkJICogRm9uY3Rpb24gcu+/vWN1cnNpdmUgYXV4aWxpYWlyZSBwb3VyIGxhIG3vv710aG9kZSBsaXN0ZXIoKS4KCQkgKgoJCSAqIFxwb3N0IExlIHNvdXMtYXJicmUgZXN0IGluY2hhbmfvv70KCQkgKiAKCQkgKi8KCQkvL3ZvaWQgX2F1eEVuT3JkcmUoTm9ldWQqLCBzdGQ6OnZlY3RvcjxFPiYpIGNvbnN0OwoKCQkvKiogICAgICAgICAgICAgICAgICAgICAgIAoJCSAqICBcYnJpZWYgQ29waWVyIGRldXggc291cy1hcmJyZQoJCSAqCgkJICogRm9uY3Rpb24gcu+/vWN1cnNpdmUgYXV4aWxpYWlyZSBwb3VyIGxlIGNvbnN0cnVjdGV1ciBkZSBjb3BpZQoJCSAqCgkJICogXHBvc3QgTGUgc291cy1hcmJyZSBzb3VyY2UgZXN0IGluY2hhbmfvv70KCQkgKiAKCQkgKi8KCQl2b2lkIF9hdXhDb3BpZXIoIE5vZXVkICosIE5vZXVkKiYpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CgoJCS8qKiAgICAgICAgICAgICAgICAgICAgICAgCgkJICogIFxicmllZiBE77+9dHJ1aXJlIHVuIHNvdXMtYXJicmUKCQkgKgoJCSAqIEZvbmN0aW9uIHLvv71jdXJzaXZlIGF1eGlsaWFpcmUgcG91ciBsZSBkZXN0cnVjdGV1cgoJCSAqCgkJICogXHBvc3QgTGUgc291cy1hcmJyZSBlc3QgZO+/vXRydWl0CgkJICogCgkJICovCgkJdm9pZCAgX2F1eERldHJ1aXJlKE5vZXVkICogJnQpOwoKCQkvKiogICAgICAgICAgICAgICAgICAgICAgIAoJCSAqICBcYnJpZWYgUGFyY291cmlyIGVuIFByZS1PcmRyZSB1biBzb3VzLWFyYnJlCgkJICoKCQkgKiBGb25jdGlvbiBy77+9Y3Vyc2l2ZSBhdXhpbGlhaXJlIHBvdXIgbGUgcGFyY291cnMgZW4gcHLvv70tb3JkcmUKCQkgKgoJCSAqIFxwb3N0IExlIHNvdXMtYXJicmUgZXN0IGluY2hhbmfvv70KCQkgKiAKCQkgKi8KCQl2b2lkIF9hdXhQcmVPcmRyZShOb2V1ZCAqLHZvaWQgKCogdHJhaXRlbWVudCkoRSYpKSBjb25zdDsKCgkJLyoqICAgICAgICAgICAgICAgICAgICAgICAKCQkgKiAgXGJyaWVmIENvbnN0cnVjdGlvbiBkJ3VuIGFyYnJlIO+/vSBwYXJ0aXIgZGVzIHRhYmxlYXV4IGRlIDIgdmlzaXRlcyAocO+/vXJlIGV0IHN5be+/vXRyaXF1ZSkKCQkgKgoJCSAqIEZvbmN0aW9uIHLvv71jdXJzaXZlIGF1eGlsaWFpcmUgcG91ciBsZSBjb25zdHJ1Y3RldXIgIzIKCQkgKiAKCQkgKiAgXHByZSBJbCBmYXV0IHF1J2lsIHkgYWl0IHN1ZmZpc2FtbWVudCBkZSBt77+9bW9pcmUKCQkgKgoJCSAqICBccG9zdCBMZSBzb3VzLWFyYnJlIGNvbnN0cnVpdCBlc3QgcmV0b3Vybu+/vQoJCSAqCgkJICogIFxleGNlcHRpb24gYmFkX2FsbG9jIHMnaWwgbid5IGEgcGFzIGFzc2V6IGRlIG3vv71tb2lyZQoJCSAqLwoJCU5vZXVkICogX2F1eFBlcmVTeW0oRSAqdGFiUywgaW50IGRlYnV0LCBpbnQgZmluLCBFICoqcHRyLCBpbnQgJmNhcmQpIHRocm93KHN0ZDo6YmFkX2FsbG9jKTsKCgoJfTsKfS8vRmluIGR1IG5hbWVzcGFjZQoKI2luY2x1ZGUgIkJTVC5pbmwiCgojZW5kaWYKCgoKCgo=


