logo

Binääripuu

Binaaripuu tarkoittaa, että solmulla voi olla enintään kaksi lasta. Tässä binäärinimi itsessään viittaa siihen, että 'kaksi'; siksi jokaisella solmulla voi olla joko 0, 1 tai 2 lasta.

Ymmärretään binääripuu esimerkin kautta.

Binääripuu

Yllä oleva puu on binääripuu, koska jokainen solmu sisältää äärimmäisen kaksi lasta. Yllä olevan puun looginen esitys on annettu alla:

Binääripuu

Yllä olevassa puussa solmu 1 sisältää kaksi osoitinta, eli vasemman ja oikean osoittimen, jotka osoittavat vasempaan ja oikeaan solmuun. Solmu 2 sisältää molemmat solmut (vasen ja oikea solmu); siksi siinä on kaksi osoitinta (vasen ja oikea). Solmut 3, 5 ja 6 ovat lehtisolmuja, joten kaikki nämä solmut sisältävät TYHJÄ osoitin sekä vasemmalla että oikealla puolella.

Binaaripuun ominaisuudet

  • Jokaisella i:n tasolla solmujen enimmäismäärä on 2i.
  • Puun korkeus määritellään pisimmäksi poluksi juurisolmusta lehtisolmuun. Yllä esitetyn puun korkeus on 3. Siksi korkeudella 3 olevien solmujen maksimimäärä on (1+2+4+8) = 15. Yleensä korkeudella h suurin mahdollinen solmumäärä on (20+ 21+ 22+….2h) = 2h+1-1.
  • Pienin mahdollinen solmumäärä korkeudella h on yhtä suuri kuin h+1 .
  • Jos solmujen lukumäärä on minimi, niin puun korkeus olisi maksimi. Päinvastoin, jos solmujen lukumäärä on maksimi, puun korkeus olisi pienin.

Jos binääripuussa on 'n' määrä solmuja.

java regex $

Minimikorkeus voidaan laskea seuraavasti:

Kuten tiedämme,

n = 2h+1-1

n+1 = 2h+1

Ottaen puun molemmilta puolilta,

Hirsi2(n+1) = log2(2h+1)

Hirsi2(n+1) = h+1

h = loki2(n+1) - 1

Suurin korkeus voidaan laskea seuraavasti:

Kuten tiedämme,

n = h+1

h = n-1

Binääripuutyypit

Binääripuita on neljää tyyppiä:

    Täysi / oikea / tiukka binaaripuu Täydellinen binaaripuu Täydellinen binaaripuu Degeneroitunut binaaripuu Tasapainoinen binaaripuu

1. Täysi / oikea / tiukka binaaripuu

matriisi javassa

Täysi binääripuu tunnetaan myös tiukkana binääripuuna. Puuta voidaan pitää täydellisenä binääripuuna vain, jos jokaisessa solmussa on oltava joko 0 tai 2 alapistettä. Täysi binääripuu voidaan myös määritellä puuksi, jossa jokaisessa solmussa on oltava 2 lapsia lehtisolmuja lukuun ottamatta.

Katsotaanpa yksinkertaista esimerkkiä koko binaaripuusta.

Binääripuutyypit

Yllä olevassa puussa voimme havaita, että jokainen solmu sisältää joko nollan tai kaksi lasta; siksi se on täysi binaarinen puu.

Täyden binaaripuun ominaisuudet

  • Lehtisolmujen lukumäärä on yhtä suuri kuin sisäisten solmujen lukumäärä plus 1. Yllä olevassa esimerkissä sisäisten solmujen lukumäärä on 5; siksi lehtien solmujen lukumäärä on 6.
  • Solmujen enimmäismäärä on sama kuin binääripuun solmujen lukumäärä, eli 2h+1-1.
  • Täyden binääripuun solmujen vähimmäismäärä on 2*h-1.
  • Täyden binääripuun vähimmäiskorkeus on Hirsi2(n+1) - 1.
  • Täyden binääripuun maksimikorkeus voidaan laskea seuraavasti:

n = 2*h - 1

n+1 = 2*h

h = n+1/2

Täydellinen binääripuu

Täydellinen binääripuu on puu, jossa kaikki solmut ovat täysin täytettynä viimeistä tasoa lukuun ottamatta. Viimeisellä tasolla kaikkien solmujen on oltava mahdollisimman vasemmalla. Täydellisessä binääripuussa solmut tulee lisätä vasemmalta.

Luodaan täydellinen binääripuu.

Binääripuutyypit

Yllä oleva puu on täydellinen binääripuu, koska kaikki solmut ovat täysin täytettyinä ja kaikki viimeisen tason solmut lisätään ensin vasemmalle.

Täydellisen binaaripuun ominaisuudet

  • Täydellisen binääripuun solmujen enimmäismäärä on 2h+1- 1.
  • Täydellisen binääripuun solmujen vähimmäismäärä on 2h.
  • Täydellisen binääripuun vähimmäiskorkeus on Hirsi2(n+1) - 1.
  • Täydellisen binääripuun enimmäiskorkeus on

Täydellinen binaaripuu

Puu on täydellinen binääripuu, jos kaikilla sisäisillä solmuilla on 2 lasta ja kaikki lehtisolmut ovat samalla tasolla.

Binääripuutyypit

Katsotaanpa yksinkertaista esimerkkiä täydellisestä binääripuusta.

Alla oleva puu ei ole täydellinen binääripuu, koska kaikki lehtien solmut eivät ole samalla tasolla.

Binääripuutyypit

Huomautus: Kaikki täydelliset binääripuut ovat täydellisiä binääripuita sekä täydellisiä binääripuita, mutta päinvastoin ei pidä paikkaansa, eli kaikki täydelliset binääripuut ja täydelliset binääripuut ovat täydellisiä binääripuita.

Degeneroitunut binääripuu

Degeneroitunut binääripuu on puu, jossa kaikilla sisäisillä solmuilla on vain yksi lapsi.

Ymmärretään degeneroitunutta binaaripuuta esimerkkien kautta.

Binääripuutyypit

Yllä oleva puu on rappeutunut binääripuu, koska kaikilla solmuilla on vain yksi lapsi. Se tunnetaan myös oikealle vinopuuna, koska kaikilla solmuilla on vain oikea lapsi.

Binääripuutyypit

Yllä oleva puu on myös rappeutunut binääripuu, koska kaikilla solmuilla on vain yksi lapsi. Se tunnetaan myös vasemmalle vinopuuna, koska kaikilla solmuilla on vain vasen lapsi.

Tasapainoinen binääripuu

Tasapainotettu binääripuu on puu, jossa sekä vasen että oikea puu eroavat korkeintaan 1:llä. AVL ja Puna-mustat puut ovat tasapainoisia binääripuuta.

Ymmärretään tasapainoinen binääripuu esimerkkien kautta.

Binääripuutyypit

Yllä oleva puu on tasapainotettu binääripuu, koska ero vasemman ja oikean alipuun välillä on nolla.

Binääripuutyypit

Yllä oleva puu ei ole tasapainotettu binääripuu, koska ero vasemman ja oikean alipuun välillä on suurempi kuin 1.

r c-kielellä

Binaaripuun toteutus

Binääripuu toteutetaan osoittimien avulla. Puun ensimmäistä solmua edustaa juuriosoitin. Jokainen puun solmu koostuu kolmesta osasta, eli tiedosta, vasemmasta ja oikeasta osoittimesta. Binääripuun luomiseksi meidän on ensin luotava solmu. Luomme käyttäjän määrittämän solmun alla olevan kuvan mukaisesti:

 struct node { int data, struct node *left, *right; } 

Yllä olevassa rakenteessa tiedot on arvo, vasen osoitin sisältää vasemman solmun osoitteen ja oikea osoitin sisältää oikean solmun osoitteen.

Binääripuu-ohjelma C-muodossa

 #include struct node { int data; struct node *left, *right; } void main() { struct node *root; root = create(); } struct node *create() { struct node *temp; int data; temp = (struct node *)malloc(sizeof(struct node)); printf('Press 0 to exit'); printf('
Press 1 for new node'); printf('Enter your choice : '); scanf('%d', &choice); if(choice==0) { return 0; } else { printf('Enter the data:'); scanf('%d', &data); temp->data = data; printf('Enter the left child of %d', data); temp->left = create(); printf('Enter the right child of %d', data); temp->right = create(); return temp; } } 

Yllä oleva koodi kutsuu create()-funktiota rekursiivisesti ja luo uuden solmun jokaisessa rekursiivisessa kutsussa. Kun kaikki solmut on luotu, se muodostaa binääripuurakenteen. Solmuissa vierailuprosessi tunnetaan nimellä puun läpikulku. Solmussa vierailemiseen käytetään kolmen tyyppisiä läpikulkuja:

  • Tilauksen läpikulku
  • Ennakkotilaa läpikulku
  • Postimääräyksen läpikulku