Introduksjon
Et tre i programvare er som et biologisk tre, men med følgende forskjeller:
- Det er tegnet opp ned.
- Den har bare en rot og ingen stamme.
- Grenene kommer ut fra roten.
- Et punkt der en gren tar av fra en annen gren eller roten kalles noden.
- Hver node har en verdi.
Grenene til programvaretreet er representert med rette linjer. Et godt eksempel på et programvaretre du kanskje har brukt, er katalogtreet til datamaskinens harddisk.
Det finnes forskjellige trær. Det er det generelle treet som andre trær kommer fra. Andre trær er avledet ved å innføre begrensninger i det generelle treet. For eksempel vil du kanskje ha et tre der ikke mer enn to grener stammer fra en node. et slikt tre vil bli kalt et binært tre. Denne artikkelen beskriver det generelle treet og hvordan du får tilgang til alle nodene.
Hyperkoblingen for å laste ned koden er gitt nederst i denne artikkelen.
For å forstå kodeeksemplene i denne artikkelen, må du ha grunnleggende kunnskap i JavaScript (ECMAScript). Hvis du ikke har den kunnskapen, kan du få den fra http: // www.bredt nettverk.com / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm
Det generelle trediagrammet
'A' er rotnoden; det er første nivå node. B, C, D er på andre linje; dette er andre nivå noder. E, F, G, H, I, J, K er på tredje linje, og de er tredje nivå noder. En fjerde linje ville ha produsert fjerde nivå noder, og så videre.
Treegenskaper
- Alle grener for alle nivåer av noder, har én kilde, som er rotnoden.
- Et tre har N - 1 grener, hvor N er totalt antall noder. Ovenstående diagram for det generelle treet har 11 noder og 10 grener.
- I motsetning til mennesker, hvor hvert barn har to foreldre, med programvaretreet, har hvert barn bare en forelder. Rotnoden er den største forfedren. En forelder kan ha mer enn ett barn. Hver node, unntatt rotnoden, er et barn.
Treordforråd
- Rotknutepunkt: Dette er den høyeste noden i treet, og den har ingen foreldre. Hver annen node har en forelder.
- Bladknuter: En bladnode er en node som ikke har barn. De er vanligvis nederst på treet og noen ganger på venstre og / eller høyre side av treet.
- Nøkkel: Dette er verdien av et tre. Det kan være et tall; det kan være en streng; det kan til og med være en operatør som + eller - eller x.
- Nivåer: Rotnoden er på første nivå. Barna er på andre nivå; Barna til nodene på andre nivå er på tredje nivå, og så videre.
- Overordnet node: Hver node, unntatt rotnoden, har en overordnet node som er koblet til den av en gren. Enhver node, unntatt rotnoden, er en undernode.
- Søskenknuter: Søskenknuter er noder som har samme foreldre.
- Sti: Grenene (rette linjer) som forbinder en node til en annen, gjennom andre noder, danner en bane. Grenene kan være piler.
- Ancestor Node: Alle de høyere nodene som er koblet til et barn, inkludert foreldrene og rotnoden, er stamnoder.
- Avstamnode: Alle nedre noder koblet til en node, helt ned til tilkoblede blader, er etterkommende noder. Den aktuelle noden er ikke en del av de etterkommende noder. Den aktuelle noden trenger ikke å være rotnoden.
- Subtrær: En node pluss alle dens etterkommere helt ned til de relaterte bladene, danner et undertreet. Startnoden er inkludert, og den trenger ikke være roten; ellers ville det være hele treet.
- Grad: Antall barn en node har, kalles graden av noden.
Traversing All Nodes of A Tree
Alle noder i et tre er tilgjengelige for å lese eller endre hvilken som helst verdi av noden. Dette gjøres imidlertid ikke vilkårlig. Det er tre måter å gjøre dette på, som alle involverer Depth-First Traversal som følger:
1) Bestilt: Enkelt sagt, i denne ordningen krysses venstre undertre først; deretter får du tilgang til rotnoden; deretter krysses det rette undertreet. Denne ordningen er symbolisert som venstre-> rot-> høyre. Fig 1 vises her for enkel referanse:
Forutsatt at det er to søsken per node; deretter venstre-> rot-> høyre betyr, du får tilgang til den nederste og venstre noden først, deretter foreldren til noden, og deretter høyre søsken. Når det er mer enn to søsken, ta den første som venstre og resten av høyre noder, som høyre. For det generelle treet over er tilgang til nederste venstre undertre for å ha, [EBF]. Dette er et undertreet. Forelderen til dette undertreet er A; så er A nå tilgjengelig for å ha [EBF] A. Deretter får du tilgang til undertreet [GCHI] for å ha et større undertreet, [[EBF] A [GCHI]]. Du kan se den venstre-> rot-> høyre profilen som skildrer seg selv. Dette store venstre undertreet vil ha undertreet, [JDK] til høyre for å fullføre traverseringen for å oppnå, [[EBF] A [GCHI]] [JDK].
2) Forhåndsbestill: Enkelt sagt, i denne ordningen er tilgang til rotnoden først, deretter krysses venstre undertre neste, og deretter krysses høyre undertre. Denne ordningen er symbolisert som rot-> venstre-> høyre. Fig 1 vises her for enkel referanse.
Forutsatt at det er to søsken per node; deretter betyr rot-> venstre-> høyre, du får tilgang til roten først, deretter venstre nærmeste barn, og deretter høyre nærmeste barn. Når det er mer enn to søsken, ta den første som venstre og resten av høyre noder, som høyre. Det venstre barnet til det venstre barnet er det neste man får tilgang til. For det generelle treet ovenfor er rotundertreet [ABCD]. Til venstre for dette undertreet har du undertreet, [EF], som gir tilgangssekvensen, [ABCD] [EF]. Til høyre for dette større undertræret har du to undertrær, [GHI] og [JK], som gir den fullstendige sekvensen, [ABCD] [EF] [GHI] [JK]. Du kan se rot-> venstre-> høyre profil som skildrer seg selv.
3) Postordre: Enkelt sagt, i denne ordningen krysses venstre undertre først, deretter krysses høyre undertre, og deretter får du tilgang til roten. Denne ordningen er symbolisert som venstre-> høyre-> rot. Fig 1 vises her for enkel referanse.
For dette treet er undertrærne, [EFB], [GHIC], [JKD] og [A] som danner sekvensen, [EFB], [GHIC], [JKD] [A]. Du kan se venstre-> høyre-> rotprofil som skildrer seg selv.
Lage treet
Ovenstående tre blir opprettet ved hjelp av ECMAScript, som er som den siste versjonen av JavaScript. Hver node er en matrise. Det første elementet i hver node-array er nodens overordnede, en annen array. Resten av elementene i noden er nodenes barn, og begynner fra det venstre barnet. Det er et ECMAScript-kart som knytter hver matrise til den tilsvarende strengen (bokstaven). Det første kodesegmentet er: