Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- #include <vector>
- using namespace std;
- constexpr auto SPATIU = 5;
- struct PERECHE
- {
- char caract = NULL;
- vector<char> cod;
- };
- struct PERECHI
- {
- vector<PERECHE> caractCod;
- void citirePerechi()
- {
- ifstream fin("coduri.in");
- if (fin.peek() == EOF) {
- cout << "Fisierul este vid. \n";
- return;
- }
- int nrPerechi;
- fin >> nrPerechi;
- if (!nrPerechi) {
- cout << "Numarul de perechi este nul. \n";
- return;
- }
- caractCod.resize(nrPerechi);
- char c;
- fin >> c;
- caractCod[0].caract = c;
- for (int index = 0; index < nrPerechi; ++index)
- {
- while (fin >> c)
- {
- if (isdigit(c))
- caractCod[index].cod.push_back(c);
- else
- break;
- }
- if (index + 1 < nrPerechi)
- caractCod[index + 1].caract = c;
- }
- fin.close();
- }
- void afisarePerechi()
- {
- for (int index = 0; index < caractCod.size(); ++index)
- {
- cout << caractCod[index].caract << ' ';
- for (int index2 = 0; index2 < caractCod[index].cod.size(); ++index2)
- cout << caractCod[index].cod[index2];
- cout << endl;
- }
- }
- };
- struct NOD
- {
- char info = 'N';
- NOD* st = NULL, * dr = NULL;
- };
- struct ARBORE
- {
- NOD* radacina = new NOD;
- bool empty()
- {
- if (radacina == NULL)
- return true;
- return false;
- }
- NOD* inserareNOD(NOD*& nod)
- {
- NOD* nou = new NOD;
- nod = nou;
- return nou;
- }
- void formareArbore(vector<PERECHE> caractCod)
- {
- for (int index = 0; index < caractCod.size(); ++index)
- {
- NOD* nod = new NOD;
- nod = radacina;
- for (int index2 = 0; index2 < caractCod[index].cod.size(); ++index2)
- if (caractCod[index].cod[index2] == '0')
- {
- if (nod->st == NULL)
- nod = inserareNOD(nod->st);
- else
- nod = nod->st;
- }
- else
- {
- if (nod->dr == NULL)
- nod = inserareNOD(nod->dr);
- else
- nod = nod->dr;
- }
- nod->info = caractCod[index].caract;
- }
- }
- int inaltime(NOD* rad)
- {
- if (rad == NULL)
- return -1;
- int inaltimeSt = inaltime(rad->st);
- int inaltimeDr = inaltime(rad->dr);
- return max(inaltimeSt, inaltimeDr) + 1;
- }
- void afisareNivel(NOD* rad, int nivel)
- {
- if (rad == NULL)
- return;
- if (nivel == 0)
- cout << rad->info << ' ';
- else
- {
- afisareNivel(rad->st, nivel - 1);
- afisareNivel(rad->dr, nivel - 1);
- }
- }
- void BFS()
- {
- int h = inaltime(radacina);
- for (int nivel = 0; nivel <= h; ++nivel)
- afisareNivel(radacina, nivel);
- cout << endl;
- }
- void afisareArbore(NOD* rad, int spatiu)
- {
- if (rad == NULL)
- return;
- spatiu += SPATIU;
- afisareArbore(rad->dr, spatiu);
- cout << endl;
- for (int index = SPATIU; index < spatiu; cout << " ", ++index);
- cout << rad->info;
- afisareArbore(rad->st, spatiu);
- }
- void stergereArbore(NOD*& rad)
- {
- if (rad == NULL)
- return;
- stergereArbore(rad->st);
- stergereArbore(rad->dr);
- delete rad;
- rad = nullptr;
- }
- };
- int main()
- {
- PERECHI perechi;
- perechi.citirePerechi();
- if (perechi.caractCod.empty())
- return 0;
- cout << "Perechile citite din fisier: \n";
- perechi.afisarePerechi();
- ARBORE arbore;
- if (!arbore.empty())
- {
- arbore.formareArbore(perechi.caractCod);
- arbore.afisareArbore(arbore.radacina, 0);
- cout << endl << endl;
- arbore.BFS();
- }
- else
- cout << "Arborele este vid. \n";
- perechi.caractCod.clear();
- perechi.caractCod.shrink_to_fit();
- arbore.stergereArbore(arbore.radacina);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement