Järjestä binääripuusi. Jokainen binääripuu tarvitsee rakenteen, vaikka sillä olisi vain yksi muuttuja. Valitse nimi ja luo se typedef: llä: typedef struct student_data STUDENT_DATA;
Määrittele rakenne. Sisällytä kaksi osoitinta samaan rakenteeseen: struct opiskelijatiedot { int opiskelijatunnus; int opiskelija_luokka; STUDENT_DATA vasemmalle, oikein;};
Osoita tälle tietorakenteelle alustamalla se NULL: ksi puun pääksi: STUDENT_DATA *students = NULL;
Varaa tietorakenteeseen kaksi väliaikaista osoitinta: STUDENT_DATA uusi oppilas, cur_student;
Käytä malloc() luodaksesi uuden elementin tarkistaen aina virheen: if ((new_student = malloc (koko (STUDENT_DATA))) == NULL) { abort(); }
Täytä uuden elementin kentät. Aseta sen vasemman ja oikean kentän arvoksi NULL: uusi_opiskelija->opiskelijatunnus = uusi ID; uusi_opiskelija->opiskelijakoko = uutiskoko; uusi_opiskelija->vasen = NULL; uusi_opiskelija->oikea = NULL;
Harkitse päämuuttujaa. Jos päämuuttuja on NULL, tämä on ensimmäinen puuhun lisätty elementti, joten aseta head-muuttuja osoittamaan sitä, ja olet valmis: if (!students) { opiskelijat = uusi_opiskelija; palata; }
Käsittele kaksoismerkintää, jos uusi arvo ja nykyinen arvo ovat yhtä suuret: if (uusiID == cur_stdent-> student_ID) { abort(); }
Käsittele eriarvoisia arvoja. Jos uusi arvo on pienempi kuin nykyinen arvo, uusi elementti siirtyy vasemmalle. Lisää se heti, jos vasemmalla ei ole mitään. Muussa tapauksessa käännä vasemmalle ja silmukka: if (uusiID < oma_opiskelija->opiskelijatunnus) { if (cur_stdent->left == NULL) { cur_stdent->left = uutisopiskelija; paluu 1; } cur_student = cur_stdent->vasen;
Tee sama oikealla, muuten: } else { if (cur_student->right == NULL) { cur_student->right = uutisopiskelija; paluu 1; } cur_student = cur_stdent->right; }}
Luo väliaikainen muuttuja, joka osoittaa tietorakenteeseen: STUDENT_DATA *cur_student;
Selaa elementit läpi ja tarkista haluttu arvo: while (cur_student) { if (cur_student-> student_ID == 15) { return cur_student-> student_grade; }
Haara vasemmalle tai oikealle, ja silmukka, jos sitä ei löydy: if (cur_student-> student_ID < 15) { cur_student = cur_student->right; } else { cur_student = oma opiskelija->vasen; }
Katso, päättyykö silmukka. Jos on, se tarkoittaa, että et koskaan löytänyt tuotetta: }return 0;
Pura binääripuun kohdistaminen, kun ohjelmasi päättyy, koska kaikki käyttöjärjestelmät eivät käsittele tätä automaattisesti. Tämä on parasta tehdä käyttämällä rekursiivista funktiota: void deallocate_binary_tree (STUDENT_DATA *puu) {
Vapauta vasen ja oikea alipuu rekursiivisesti: deallocate_binary_tree (puu->vasen); deallocate_binary_tree (puu->oikea);
Haku ja lisääminen binääripuihin voidaan tehdä myös rekursiolla. Tämä on paljon helpompi kirjoittaa ja ylläpitää, mutta hieman vaikeampi ymmärtää, kunnes tottut siihen. On yleistä luoda binääripuu, joka sisältää vain osoittimia toiseen C-tietorakenteeseen, usein taulukkoon tai linkitettyyn luetteloon, jossa varsinainen data sijaitsee. Jokainen binääripuu on hakemisto, jonka avulla voit hakea nopeasti yhdestä luettelotietojen kentästä.
Binääripuusta poistaminen on erittäin monimutkainen algoritmi C: ssä, mutta monissa binääripuiden käyttötavoissa elementtejä ei koskaan poisteta.