#include #include #include using namespace std; // razred IskalnoDrevo class IskalnoDrevo { // razred Vozlisce class Vozlisce { double podatek; Vozlisce *levo; Vozlisce *desno; public: Vozlisce(double podatek) { this->podatek = podatek; this->levo = NULL; this->desno = NULL; } void vstavi(double podatek) { if (podatek < this->podatek) { if (levo == NULL) levo = new Vozlisce(podatek); else levo->vstavi(podatek); } else { if (desno == NULL) desno = new Vozlisce(podatek); else desno->vstavi(podatek); } } int stevilo_vozlisc() { int stevilo = 1; if(desno != NULL) stevilo += desno->stevilo_vozlisc(); if(levo != NULL) stevilo += levo->stevilo_vozlisc(); return stevilo; } int visina_drevesa(int globina) { int desnoVisina = 0; int levoVisina = 0; if(desno != NULL) desnoVisina += desno->visina_drevesa(globina + 1); if(levo != NULL) levoVisina += levo->visina_drevesa(globina + 1); if(levoVisina == 0 and desnoVisina == 0) return globina; else if(levoVisina < desnoVisina) return desnoVisina; else return levoVisina; } double najvecji() { double najvec = this->podatek; if(desno != NULL) najvec = desno->najvecji(); return najvec; } double najmanjsi() { double najmanj = this->podatek; if(levo != NULL) najmanj = levo->najmanjsi(); return najmanj; } void premi_pregled(queue &vrsta) { vrsta.push(podatek); if(levo != NULL) levo->premi_pregled(vrsta); if(desno != NULL) desno->premi_pregled(vrsta); } void vmesni_pregled(queue &vrsta) { if(levo != NULL) levo->vmesni_pregled(vrsta); vrsta.push(podatek); if(desno != NULL) desno->vmesni_pregled(vrsta); } void obratni_pregled(queue &vrsta) { if(levo != NULL) levo->obratni_pregled(vrsta); if(desno != NULL) desno->obratni_pregled(vrsta); vrsta.push(podatek); } bool iskanje(double stevilo) { if(stevilo == podatek) return true; if (stevilo < podatek) { if (levo == NULL) return false; else return levo->iskanje(stevilo); } else { if (desno == NULL) return false; else return desno->iskanje(stevilo); } } double vsota() { double stevilo = podatek; if(desno != NULL) stevilo += desno->vsota(); if(levo != NULL) stevilo += levo->vsota(); return stevilo; } }; // nadaljevanje razreda IskalnoDrevo Vozlisce *koren; public: IskalnoDrevo() { koren = NULL; } void vstavi(double podatek) { if (koren == NULL) koren = new Vozlisce(podatek); else koren->vstavi(podatek); } int stevilo_vozlisc() const { if (koren == NULL) return 0; else return koren->stevilo_vozlisc(); } int visina_drevesa() const { if (koren == NULL) return 0; else return koren->visina_drevesa(1); } double najvecji() const { if (koren == NULL) return numeric_limits::quiet_NaN(); return koren->najvecji(); } double najmanjsi() const { if (koren == NULL) return numeric_limits::quiet_NaN(); return koren->najmanjsi(); } queue premi_pregled() const { queue prefiks; if (koren != NULL) koren->premi_pregled(prefiks); return prefiks; } queue vmesni_pregled() const { queue infiks; if (koren != NULL) koren->vmesni_pregled(infiks); return infiks; } queue obratni_pregled() const { queue postfiks; if (koren != NULL) koren->obratni_pregled(postfiks); return postfiks; } bool iskanje(double stevilo) const { if (koren != NULL) return koren->iskanje(stevilo); return false; } double vsota() const { if (koren != NULL) return koren->vsota(); return numeric_limits::quiet_NaN(); } }; int main(int argn, char **args) { double zaporedje[] = {5,2,8,10,4,6,1,12,-5,-3,-6,-8,7 }; int dolzina = 13; // ustvarimo nov objekt IskalnoDrevo id; // napolnimo drevo for (int i = 0; i < dolzina; i++) id.vstavi((zaporedje[i])); // pričakovan izhod double pricakovan_izhod = 7; // dobljen izhod double dobljen_izhod = id.najvecji(); // preverimo, če dobimo pravilen izhod if (pricakovan_izhod == dobljen_izhod) cout << "OK" << endl; else cout << "Napaka! Pricakovan izhod: " << pricakovan_izhod << ", dobljen izhod: " << dobljen_izhod << endl; cout << "Stevilo vozlisc: " << id.stevilo_vozlisc() << "\n"; cout << "Najdi stevilo 2: " << (id.iskanje(2) ? "true" : "false") << "\n"; cout << "Najdi stevilo 1: " << (id.iskanje(1) ? "true" : "false") << "\n"; cout << id.vsota() << endl; cout << id.visina_drevesa() << endl; queue ha = id.premi_pregled(); for (int i = 0; i < dolzina; ++i) { cout << ha.front() << " "; ha.pop(); } cout << "\n"; ha = id.vmesni_pregled(); for (int i = 0; i < dolzina; ++i) { cout << ha.front() << " "; ha.pop(); } cout << "\n"; ha=id.obratni_pregled(); for (int i = 0; i < dolzina; ++i) { cout << ha.front() << " "; ha.pop(); } return 0; }