Įvadas
Medis programinėje įrangoje yra tarsi biologinis medis, tačiau turi šiuos skirtumus:
- Jis nupieštas aukštyn kojomis.
- Jis turi tik vieną šaknį ir be kamieno.
- Šakos atsiranda iš šaknies.
- Taškas, kuriame šaka pakyla iš kitos šakos arba šaknis, vadinamas mazgu.
- Kiekvienas mazgas turi vertę.
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
- Šaknies mazgas: Tai yra aukščiausias medžio mazgas ir jis neturi tėvų. Kiekvienas kitas mazgas turi tėvą.
- Lapų mazgai: Lapų mazgas yra mazgas, kuris neturi vaiko. Paprastai jie yra medžio apačioje ir kartais yra kairėje ir (arba) dešinėje medžio pusėse.
- Raktas: Tai yra medžio vertė. Tai gali būti skaičius; tai gali būti stygos; tai gali būti net operatorius, pvz., + arba - arba x.
- Lygiai: Šaknies mazgas yra pirmame lygyje. Jos vaikai yra antrame lygyje; Antrojo lygio mazgų vaikai yra trečiame lygyje ir t.
- Tėvų mazgas: Kiekvienas mazgas, išskyrus šakninį mazgą, turi pagrindinį mazgą, sujungtą filialu. Bet kuris mazgas, išskyrus šakninį mazgą, yra antrinis mazgas.
- Brolių broliai: Brolių broliai yra mazgai, turintys tą patį tėvą.
- Kelias: Šakos (tiesios linijos), jungiančios vieną mazgą su kitu, per kitus mazgus, sudaro kelią. Šakos gali būti rodyklės, gali ir nebūti.
- Protėvio mazgas: Visi aukštesnieji mazgai, prijungti prie vaiko, įskaitant tėvą ir šakninį mazgą, yra protėvių mazgai.
- Palikuonio mazgas: Visi apatiniai mazgai, prijungti prie mazgo, tiesiai prie sujungtų lapų, yra palikuonių mazgai. Aptariamas mazgas nėra palikuonių mazgų dalis. Aptariamas mazgas neturi būti šakninis mazgas.
- Potis: Mazgas ir visi jo palikuonys iki pat susijusių lapų sudaro submedį. Pradinis mazgas yra įtrauktas, ir jis neturi būti šaknis; kitaip tai būtų visas medis.
- Laipsnis: Vaikų, kuriuos turi mazgas, skaičius vadinamas mazgo laipsniu.
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: