Duomenų struktūros ir algoritmai

Medžio duomenų struktūros pamoka pradedantiesiems

Medžio duomenų struktūros pamoka pradedantiesiems

Įvadas

Medis programinėje įrangoje yra tarsi biologinis medis, tačiau turi šiuos skirtumus:

Programinės įrangos medžio šakos vaizduojamos tiesiomis linijomis. Geras programinės įrangos medžio, kurį galbūt naudojate, pavyzdys yra jūsų kompiuterio standžiojo disko katalogų medis.

Medžių yra įvairių rūšių. Yra bendras medis, iš kurio gaunami kiti medžiai. Kiti medžiai gaunami įvedant apribojimus į bendrą medį. Pavyzdžiui, galbūt norėsite medžio, kuriame iš mazgo kyla ne daugiau kaip dvi šakos; toks medis būtų vadinamas dvejetainiu medžiu.  Šiame straipsnyje aprašomas bendras medis ir kaip pasiekti visus jo mazgus.

Hipersaitas kodui atsisiųsti pateikiamas šio straipsnio apačioje.

Norėdami suprasti šiame straipsnyje pateiktus kodų pavyzdžius, turite turėti pagrindinių „JavaScript“ žinių (ECMAScript). Jei neturite tų žinių, galite jas gauti iš http: // www.plačiajam tinklui.com / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm

Bendroji medžio schema


„A“ yra šaknies mazgas; tai yra pirmojo lygio mazgas. B, C, D yra antroje linijoje; tai yra antrojo lygio mazgai. E, F, G, H, I, J, K yra trečioje eilutėje ir jie yra trečiojo lygio mazgai. Ketvirta eilutė būtų sukūrusi ketvirtojo lygio mazgus ir t.

Medžio savybės

- Visos visų mazgų lygių šakos turi vieną šaltinį, kuris yra šaknies mazgas.

- Medis turi N - 1 šaką, kur N yra bendras mazgų skaičius. Aukščiau pateiktoje bendro medžio diagramoje yra 11 mazgų ir 10 šakų.

- Skirtingai nuo žmonių, kur kiekvienas vaikas turi du tėvus, su programinės įrangos medžiu, kiekvienas vaikas turi tik vieną iš tėvų. Šaknies mazgas yra didžiausias protėvių tėvas. Tėvai gali turėti daugiau nei vieną vaiką. Kiekvienas mazgas, išskyrus šakninį mazgą, yra vaikas.

Medžių žodynas

Perėjimas per visus medžio mazgus

Visus medžio mazgus galima pasiekti norint perskaityti ar pakeisti bet kurią mazgo vertę. Tačiau tai nėra daroma savavališkai. Tai galima padaryti trimis būdais, kurie visi apima pirmąjį gilumą:

1) užsakymas: Paprasčiau tariant, šioje schemoje kairysis potis yra pereinamas pirmiausia; tada prieinamas šaknies mazgas; tada pereinamas teisingas potis. Ši schema simbolizuojama kaip kairė-> šaknis-> dešinė. 1 paveikslas čia vėl rodomas, kad būtų lengviau jį pamatyti:

Darant prielaidą, kad viename mazge yra du broliai ir seserys; tada kairė-> šaknis-> dešinė reiškia, kad pirmiausia pasieksite žemiausią ir kairiausią mazgą, tada mazgo tėvą ir dešinįjį brolį. Kai yra daugiau nei du broliai ir seserys, pirmuosius laikykite kairiaisiais, o likusius dešinius mazgus - dešiniaisiais. Viršuje esančiam bendram medžiui prieinamas apatinis kairysis potis, turintis [EBF]. Tai yra potis. Šio potisės tėvas yra A; taigi, A prieinama toliau, kad turėtumėte [EBF] A. Tada prie medžio [GCHI] pasiekiamas didesnis medis, [[EBF] A [GCHI]]. Galite pamatyti, kaip kairysis-> šaknis-> dešinysis profilis vaizduoja save. Šiam dideliam kairiajam potemiui bus suteiktas potis, [JDK] dešinėje, kad užbaigtumėte kelią, kad gautumėte [[EBF] A [GCHI]] [JDK].

2) Išankstinis užsakymas: Paprasčiau tariant, šioje schemoje pirmiausia pasiekiamas šakninis mazgas, tada kairysis poskirsnis pereinamas toliau, o tada dešinysis medis. Ši schema simbolizuojama kaip šaknis-> kairė-> dešinė. 1 pav. Čia vėl rodomas, kad būtų lengviau jį pamatyti.

Darant prielaidą, kad viename mazge yra du broliai ir seserys; tada šaknis-> kairė-> dešinė reiškia, kad pirmiausia prieini prie šaknies, tada prie kairio tiesioginio vaiko ir tada dešiniojo tiesioginio vaiko. Kai yra daugiau nei du broliai ir seserys, pirmuosius laikykite kairiaisiais, o likusius dešinius mazgus - dešiniaisiais. Kitas yra kairysis kairio vaiko vaikas. Aukščiau esančio bendro medžio šaknies potis yra [ABCD]. Kairėje nuo šio potemio yra potis, [EF], suteikiantis prieigos seką, [ABCD] [EF]. Dešinėje šio didesnio potemio turite du potisčius [GHI] ir [JK], pateikdami visą seką, [ABCD] [EF] [GHI] [JK]. Galite pamatyti šakninį-> kairįjį-> dešinįjį profilį, vaizduojantį save.

3) Užsakymas: Paprasčiau tariant, šioje schemoje pirmiausia pereinamas kairysis potis, tada - dešinysis ir prieinamas šaknis. Ši schema simbolizuojama kaip kairė-> dešinė-> šaknis. 1 pav. Čia vėl rodomas, kad būtų lengviau jį pamatyti.

Šio medžio potemiai yra [EFB], [GHIC], [JKD] ir [A], kurie sudaro seką, [EFB], [GHIC], [JKD] [A]. Galite pamatyti kairįjį -> dešinįjį -> šaknies profilį, vaizduojantį save.

Medžio kūrimas

Aukščiau pateiktas medis bus sukurtas naudojant ECMAScript, kuris yra tarsi naujausia „JavaScript“ versija. Kiekvienas mazgas yra masyvas. Pirmasis kiekvieno mazgo masyvo elementas yra mazgo pirminis elementas, kitas masyvas. Kiti mazgo elementai yra mazgo vaikai, pradedant nuo kairiausio vaiko. Yra ECMAScript žemėlapis, susiejantis kiekvieną masyvą su atitinkama eilute (raide). Pirmasis kodo segmentas yra: