2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tämä artikkeli alkaa puihin ja binääripuihin liittyvillä käsitteillä, jotta voimme oppia lisää binääripuista.
🌈个人主页:Se on tarjoilija
🌈C语言笔记专栏:C-kielen muistiinpanoja
🌈C++笔记专栏: C++ muistiinpanoja
🌈初阶数据结构笔记专栏: Perustietorakenteen huomautukset
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
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)
M(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.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ä:
typedef int DataType;
struct Node
{
struct Node* _firstChild1; // 第一个孩子结点
struct Node* _pNextBrother; // 指向其下一个兄弟结点
DataType _data; // 结点中的数据域
};
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
Binääripuu on äärellinen joukko solmuja. Tällä joukolla voi olla kaksi tilannetta:
Kuvasta voidaan tehdä kaksi johtopäätöstä:
Binääripuussa ei ole solmua, jonka aste on suurempi kuin 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)
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
Tämä on tavallinen binääripuu, joka ei ole jatkuva vasemmalta oikealle.
Binääripuita voidaan yleensä tallentaa kahdessa rakenteessa, joista toinen on peräkkäinen rakenne ja toinen ketjurakenne.
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.
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,leftchild
Alaindeksi on jaettuleftchild- 1
ja1
, vartenleftchild-1
vartenparent
alaindeksi kahdesti, for(child - 1) / 2
Operaattori tekeeleftchild
Ota se pois muodossa1
Osittain jaettuna kahdella, kokonaisluku on 0,leftchild -1
Osa siitä voidaan nähdä mmleftchild
,jarightchild与leftchild相差1
,koskarightchild = leftchild - 1
ja yllä olevan kauttaleftchild - 1 ~= leftchild
, sen voi päätellärightchild = leftchild(在进行/2运算,取整数情况下)
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.
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; // 当前节点值域
};
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:
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.