Teknologian jakaminen

[Perustietorakenne] Puut ja binaaripuut: Fantasiamatka tyhjästä

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Lisää kuvan kuvaus tähän

Tämä artikkeli alkaa puihin ja binääripuihin liittyvillä käsitteillä, jotta voimme oppia lisää binääripuista.

Lisää kuvan kuvaus
Alt

🌈个人主页:Se on tarjoilija
🌈C语言笔记专栏:C-kielen muistiinpanoja
🌈C++笔记专栏: C++ muistiinpanoja
🌈初阶数据结构笔记专栏: Perustietorakenteen huomautukset

🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
Lisää kuvan kuvaus

1. Puun käsite ja rakenne

Puu on epälineaarinen tietorakenne, joka koostuun(n>=0)Rajoitetut solmut muodostavat joukon, jolla on hierarkkinen suhde. Puulla on kuitenkin käytännössä vähän arvoa, mutta binääripuulla on suurempi käytännön arvo (syy, miksi tätä joukkoa kutsutaan puuksi, on se, että sen juuri on ylöspäin ja lehdet). alaspäin se näyttää paljon puulta)

  • On olemassa erityinen solmu, jota kutsutaan juurisolmuksi. Juurisolmulla ei ole edeltäjäsolmuja.
  • Pääsolmua lukuun ottamatta loput solmut on jaettuM(M>0)hajanaisia ​​joukkojaT1、T2、....、Tm, joista jokainenTi(1<=i<=m) Se on toinen alipuu, jonka rakenne on samanlainen kuin puulla. Kunkin alipuun juurisolmulla on yksi ja vain yksi edeltäjä, ja sillä voi olla 0 tai useampia seuraajia.
  • Puut määritellään rekursiivisesti, ja samalla on huolehdittava.puurakenteessaAlipuiden välillä ei voi olla leikkauskohtaa, muuten se ei ole puurakenne

Lisää kuvan kuvaus tähän

Lisää kuvan kuvaus tähän

1.1 Puihin liittyvät käsitteet

Lisää kuvan kuvaus tähän

  • Solmun aste: Solmun sisältämien alipuiden lukumäärää kutsutaan solmun asteeksi, kuten yllä olevassa kuvassa on esitetty: A on 6
  • Lehtisolmu tai terminaalisolmu: Solmuja, joiden aste on 0, kutsutaan lehtisolmuiksi. Kuten yllä olevasta kuvasta näkyy: Solmut kuten B, C, H, I... ovat lehtisolmuja.
  • Ei-päätesolmu tai haarasolmu: Solmu, jonka aste ei ole 0 Kuten yllä olevasta kuvasta näkyy: solmut kuten D, E, F, G... ovat haarasolmuja.
  • Pääsolmu tai yläsolmu: Jos solmu sisältää lapsisolmuja, tätä solmua kutsutaan sen alisolmun pääsolmuksi. Kuten yllä olevasta kuvasta näkyy: A on B:n pääsolmu
  • lapsisolmu tai lapsisolmu: Solmun sisältämän alipuun juurisolmua kutsutaan solmun lapsisolmuksi Kuten yllä olevasta kuvasta näkyy: B on A:n lapsisolmu
  • Sisarussolmu: Solmuja, joilla on sama pääsolmu, kutsutaan sisarussolmuiksi, kuten yllä on esitetty: B ja C ovat sisarussolmuja.
  • puun aste: Puussa suurimman solmun astetta kutsutaan puun asteeksi, kuten yllä on esitetty: puun aste on 6
  • Solmutaso: Juuren määritelmästä alkaen juuri on ensimmäinen taso, juuren lapsisolmut toinen taso ja niin edelleen.
  • puun korkeus tai syvyys: Puun solmujen maksimitaso yllä olevan kuvan mukaisesti: puun korkeus on 4
  • serkkusolmu: Solmut, joiden vanhemmat ovat samalla tasolla, ovat toistensa serkkuja, kuten yllä olevasta kuvasta näkyy: H ja minä ovat toistensa velisolmuja.
  • Solmun esi-isä: Kaikki haaroissa olevat solmut juuresta solmuun, kuten yllä olevassa kuvassa näkyy: A on kaikkien solmujen esi-isä
  • jälkeläisiä : Mitä tahansa alipuun solmua, joka on juurtunut tiettyyn solmuun, kutsutaan kyseisen solmun jälkeläiseksi.Kuten yllä näkyy: kaikki solmut ovat A:n jälkeläisiä
  • metsä: Joukkoa m (m&gt;0) hajanaisia ​​puita kutsutaan metsäksi.

2. Puun tallennusesitys

Koska puurakenne on monimutkaisempi kuin lineaarinen taulukko, tallennusmenetelmä on monimutkaisempi. On tarpeen tallentaa sekä arvoalue että solmujen välinen suhde.

Tässä on useita aikaisempaan tietoon perustuvia menetelmiä:

  • Jokaisella lapsella on osoite ja hän voi tallentaa tietoja osoitintaulukon kautta (tila on kiinteä, ja uutta tilaa haettaessa tulee kustannuksia ja tilaongelmia)
  • Ensimmäisen menetelmän optimoinnissa osoitintaulukkoa käytetään sekvenssitaulukkona lasten tallentamiseen, mikä ratkaisee kiinteän tilan ongelman.
  • Suositeltu yleisesti käytetty ratkaisu: vasen lapsi ja oikea veli -menetelmä (vanhin veli ottaa toisen lapsen ja toinen lapsi kolmannen lapsen, joten molempien vanhempien ei tarvitse olla väsynyt)
typedef int DataType;
struct Node
{
    struct Node* _firstChild1; // 第一个孩子结点
    struct Node* _pNextBrother; // 指向其下一个兄弟结点
    DataType _data; // 结点中的数据域
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Lisää kuvan kuvaus tähän

Yllä olevat menetelmät eivät tietenkään ole rajoitettuja, ja olemassa on myös vanhempi-ilmaisuja, lapsi-ilmaisuja, lapsivanhemman ilmauksia ja lapsiveli-ilmauksia jne.Tässä ymmärrämme lyhyesti yleisimmin käytetytlapsiveljen edustus

3. Binääripuukonsepti

Binääripuu on äärellinen joukko solmuja. Tällä joukolla voi olla kaksi tilannetta:

  1. tyhjä puu
  2. Se koostuu juurisolmusta ja kahdesta binääripuusta, joita kutsutaan vasemmaksi alipuuksi ja oikeaksi alipuuksi (alipuu voi olla tyhjä puu)

Lisää kuvan kuvaus tähän

Kuvasta voidaan tehdä kaksi johtopäätöstä:

  1. Binääripuussa ei ole solmua, jonka aste on suurempi kuin 2

  2. Binääripuun alipuut voidaan jakaa vasempaan ja oikeaan alipuuhun, eikä järjestystä voida kääntää, joten binääripuu on järjestyspuu.

Ilmoitus: Jokaiselle binääripuulle se koostuu seuraavista tilanteista (Tyhjän puun tilanne on helpoin unohtaa)

Lisää kuvan kuvaus tähän

3.1 Binääripuu todellisuudessa (sinun täytyy kumartaa useita kertoja, kun näet sen)

Lisää kuvan kuvaus tähän

4. Erityinen binääripuu

  • täysi binääripuu :Binääripuu on täysi binääripuu, jos solmujen lukumäärä kussakin kerroksessa saavuttaa enimmäismäärän. Toisin sanoen binääripuun taso on K ja solmujen kokonaismäärä on 2K-1, silloin se on täysi binääripuu
  • täydellinen binääripuu : Täydellinen binääripuu on erittäin tehokas tietorakenne Täydellinen binääripuu johdetaan täydellisestä binääripuusta. Binääripuuta, jonka korkeus on K ja n solmua, kutsutaan täydelliseksi binääripuuksi silloin ja vain, jos kukin solmu vastaa yksi-yhteen solmuja, jotka on numeroitu 1:stä n:iin täydessä binääripuussa, jonka korkeus on K.

Lyhyesti tiivistettynä:

  • Täyden binääripuun jokainen taso on täynnä

  • Jos täydellisen binääripuun korkeus on n, niin ensimmäiset n-1 tasot ovat täynnä, mutta viimeinen taso ei välttämättä ole täynnä.Mutta sen on oltava jatkuva vasemmalta oikealle

  • Täydellinen binääripuu on erittäin tehokas tietorakenne, ja täysi binääripuu on erityinen täydellinen binääripuu.

  • Täysi binääripuu on välttämätön ja riittävä ehto täydelliselle binääripuulle

Lisää kuvan kuvaus tähän

4.1 Tilanteet, jotka eivät kuulu täydelliseen binääripuuhun

Tämä on tavallinen binääripuu, joka ei ole jatkuva vasemmalta oikealle.

Lisää kuvan kuvaus tähän

5. Binääripuun tallennusrakenne

Binääripuita voidaan yleensä tallentaa kahdessa rakenteessa, joista toinen on peräkkäinen rakenne ja toinen ketjurakenne.

5.1 Jaksottainen tallennus

Peräkkäisen rakenteen tallennus tarkoittaa taulukoiden käyttöä tallentamiseen,Yleensä taulukot soveltuvat vain täydellisten binääripuiden esittämiseen. , koska jos binääripuu ei ole täynnä, tilaa menee hukkaan. Todellisuudessa vain kasa käyttää matriiseja varastointiin. Binääripuiden peräkkäinen tallennus on fyysisesti taulukko ja loogisesti binääripuu Seuraavan kysymyksen ratkaisemiseksi meidän on käytettävä fyysisesti taulukon ja loogisesti binääripuun yhdistelmää kysymyksen ratkaisemiseksi.

Lisää kuvan kuvaus tähän

5.2 Alaindeksien säännöllinen suhde ylä- ja alasolmujen välillä (tärkeää)

  • leftchild = parent * 2 + 1;

  • rightchild = paretn * 2 +2;

  • parent = (child - 1) / 2;(Ei tee eroa vasemman ja oikean lapsen välillä)

  • Mitä tulee kolmanteen kohtaan, joka perustuu henkilökohtaisiin perusteluihin,leftchildAlaindeksi on jaettuleftchild- 1ja1, vartenleftchild-1vartenparentalaindeksi kahdesti, for(child - 1) / 2Operaattori tekeeleftchildOta se pois muodossa1Osittain jaettuna kahdella, kokonaisluku on 0,leftchild -1Osa siitä voidaan nähdä mmleftchild,jarightchild与leftchild相差1,koskarightchild = leftchild - 1ja yllä olevan kauttaleftchild - 1 ~= leftchild, sen voi päätellärightchild = leftchild(在进行/2运算,取整数情况下)

5.3 Ketjuvarasto

Binääripuun linkitetty tallennusrakenne tarkoittaa, että linkitettyä listaa käytetään edustamaan binääripuuta, eli ketjua käytetään osoittamaan elementtien loogista suhdetta. Tavallinen menetelmä on, että linkitetyn luettelon jokainen solmu koostuu kolmesta kentästä, tietokentästä sekä vasemmasta ja oikeasta osoitinkentästä. Vasemman ja oikeanpuoleisen osoittimen avulla annetaan niiden linkkipisteiden tallennusosoitteet, joissa vasen lapsi ja oikea lapsi solmun sijaitsevat vastaavasti.Ketjurakenteet on jaettu binääriketjuihin ja kolmihaaraisiin ketjuihin.

Lisää kuvan kuvaus tähän
**Rohkea tyyli**

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
        struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
    struct BinTreeNode* _pParent; // 指向当前节点的双亲
    struct BinTreeNode* _pLeft; // 指向当前节点左孩子
    struct BinTreeNode* _pRight; // 指向当前节点右孩子
    BTDataType _data; // 当前节点值域
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

5.4 Yhteenveto

Peräkkäinen rakennemuisti tallennetaan taulukoiden kautta.Yleensä taulukot soveltuvat vain kokonaisille binääripuille. Tavalliset binääripuut eivät sovellu vain ketjurakenteen tallentamiseen. . Todellisuudessa taulukoita käytetään kuitenkin varastointiin vain kasoja käytettäessä, ja suurin osa niistä varastoidaan ketjurakenteiden kautta.

syy on:

  1. Ensinnäkin meidän on tiedettävä, että binääripuulla on oma erityinen looginen rakennensa. Se eroaa muista tietorakenteista ja sopii kasatietojen lisäämiseen, poistamiseen, tarkistamiseen ja muokkaamiseen, koska avattu tila vie paljon tilaa ja tilaa. logiikka on monimutkaisempi.Jos näin monimutkaista rakennetta käytetään tietojen tallentamiseen, se ei ole arvoton. , olisi parempi käyttää peräkkäistä taulukkoa tietojen tallentamiseen alusta alkaen. Samaan aikaan binääripuun rakenne on yleisesti ottaen rekursiivinen, ja sen toteuttaminen ei-rekursiivisesti on hankalampaa.
  2. Tavallisen binääripuun varastoelementtien tiheys voi olla hyvin alhainen ja jatkuva varastorakenne aiheuttaa paljon tilanhukkaa.
  3. Keko lajitellaan "keon attribuutin" mukaan, joka määrittää solmun sijainnin puussa (selvitetty keon esittelyssä alla)

Yllä oleva on koko tämän artikkelin sisältö. Kiitos kaikille lukemisesta! Tässä ovat Dian Xiaoerin muistiinpanot perustietorakenteista. Toivottavasti niistä on sinulle apua perustietorakenteiden oppimisessa.
Lisää kuvan kuvaus