Introduktion
Ett träd i programvara är som ett biologiskt träd, men med följande skillnader:
- Det dras upp och ner.
- Den har bara en rot och ingen stam.
- Grenarna dyker upp från roten.
- En punkt där en gren tar fart från en annan gren eller roten kallas noden.
- Varje nod har ett värde.
Grenarna i programvaruträdet representeras av raka linjer. Ett bra exempel på ett programvaruträd som du kanske har använt är katalogträdet på datorns hårddisk.
Det finns olika typer av träd. Det finns det allmänna trädet från vilket andra träd kommer. Andra träd härleds genom att införa begränsningar i det allmänna trädet. Du kanske till exempel vill ha ett träd där inte mer än två grenar kommer från en nod; ett sådant träd skulle kallas ett binärt träd. Den här artikeln beskriver det allmänna trädet och hur du får åtkomst till alla dess noder.
Hyperlänken för att ladda ner koden finns längst ner i den här artikeln.
För att förstå kodproverna i den här artikeln måste du ha grundläggande kunskaper i JavaScript (ECMAScript). Om du inte har den kunskapen kan du få den från http: // www.breda nätverk.com / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm
Det allmänna träddiagrammet
'A' är rotnoden; det är den första nivånoden. B, C, D är på andra raden; dessa är andra nivå noder. E, F, G, H, I, J, K är på tredje raden och de är noder på tredje nivå. En fjärde rad skulle ha producerat fjärde nivå noder, och så vidare.
Trädegenskaper
- Alla grenar för alla nivåer av noder, har en källa, vilket är rotnoden.
- Ett träd har N - 1 grenar, där N är det totala antalet noder. Ovanstående diagram för det allmänna trädet har 11 noder och 10 grenar.
- Till skillnad från människor, där varje barn har två föräldrar, med programvaruträdet, har varje barn bara en förälder. Rotnoden är den största förfaderns förälder. En förälder kan ha mer än ett barn. Varje nod, förutom rotnoden, är ett barn.
Trädordlista
- Rotnod: Detta är den högsta noden i trädet och den har ingen förälder. Varje annan nod har en förälder.
- Bladnoder: En bladnod är en nod som inte har något barn. De är vanligtvis längst ner i trädet och är ibland på vänster och / eller höger sida av trädet.
- Nyckel: Detta är värdet på ett träd. Det kan vara ett nummer; det kan vara en sträng; det kan till och med vara en operatör som + eller - eller x.
- Nivåer: Rotnoden är på första nivån. Dess barn är på andra nivån; Barnen på andra nivåerna är på tredje nivån och så vidare.
- Föräldernod: Varje nod, utom rotnoden, har en överordnad nod ansluten till den av en gren. Varje nod, förutom rotnoden, är en undernod.
- Syskon noder: Syskonnoder är noder som har samma förälder.
- Väg: Grenarna (raka linjer) som ansluter en nod till en annan, genom andra noder, bildar en väg. Grenarna kan eller kan inte vara pilar.
- Ancestor Node: Alla högre noder som är anslutna till ett barn, inklusive föräldern och rotnoden, är förfädernoder.
- Efterkommande nod: Alla nedre noder anslutna till en nod, ända ner till anslutna blad, är efterkommande noder. Den aktuella noden är inte en del av de efterföljande noderna. Noden i fråga behöver inte vara rotnoden.
- Subträd: En nod plus alla dess ättlingar ända ner till de relaterade bladen, bildar ett underträd. Startnoden ingår, och den behöver inte vara roten; annars skulle det vara hela trädet.
- Grad: Antalet barn som en nod har kallas graden för noden.
Korsar alla noder i ett träd
Alla noder i ett träd kan nås för att läsa eller ändra valfritt värde på noden. Detta görs dock inte godtyckligt. Det finns tre sätt att göra detta, som alla involverar Depth-First Traversal enligt följande:
1) Beställning: Enkelt uttryckt, i detta schema korsas vänster subtree först; sedan nås rotnoden; sedan passeras rätt subtree. Detta schema symboliseras som vänster-> rot-> höger. Fig 1 visas här för enkel referens:
Förutsatt att det finns två syskon per nod; sedan vänster-> root-> höger betyder, du kommer först till den lägsta och vänstra noden, sedan till noderns förälder och sedan till höger syskon. När det finns fler än två syskon, ta det första som vänster och resten av de högra noderna, som det högra. För det allmänna trädet ovan kan du se nedre vänstra underträdet att ha, [EBF]. Detta är ett subtree. Föräldern till detta underträd är A; så A är nästa åtkomst för att ha [EBF] A. Därefter nås underträdet [GCHI] för att ha ett större underträd, [[EBF] A [GCHI]]. Du kan se den vänstra-> rot-> högerprofilen som visar sig själv. Detta stora vänstra underträd kommer att ha underträdet, [JDK] till höger för att slutföra traverseringen för att erhålla, [[EBF] A [GCHI]] [JDK].
2) Förbeställning: Enkelt uttryckt, i detta schema nås rotnoden först, sedan passeras vänster subtree nästa, och sedan passeras rätt subtree. Detta schema symboliseras som rot-> vänster-> höger. Fig 1 visas här igen för enkel referens.
Förutsatt att det finns två syskon per nod; sedan rot-> vänster-> höger betyder, du kommer först till roten, sedan vänster omedelbart barn och sedan rätt omedelbart barn. När det finns fler än två syskon, ta det första som vänster och resten av de högra noderna, som det högra. Det vänstra barnets längst till vänster är nästa som ska nås. För det allmänna trädet ovan är rotträdet [ABCD]. Till vänster om detta underträd har du underträdet [EF] som ger åtkomstsekvensen, [ABCD] [EF]. Till höger om detta större underträd har du två underträd, [GHI] och [JK], som ger den fullständiga sekvensen, [ABCD] [EF] [GHI] [JK]. Du kan se rot-> vänster-> högerprofilen som visar sig själv.
3) Efterbeställning: Enkelt uttryckt, i det här schemat korsas vänster subtree först, sedan passeras höger subtree och åtkomst till roten. Detta schema symboliseras som vänster-> höger-> rot. Fig 1 visas här igen för enkel referens.
För detta träd är underträdarna [EFB], [GHIC], [JKD] och [A] som bildar sekvensen, [EFB], [GHIC], [JKD] [A]. Du kan se den vänstra-> höger-> rotprofilen som visar sig själv.
Skapa trädet
Ovanstående träd kommer att skapas med hjälp av ECMAScript, som är som den senaste versionen av JavaScript. Varje nod är en matris. Det första elementet i varje nodmatris är nodens överordnade, en annan matris. Resten av elementen i noden är nodens barn, från början till vänster. Det finns en ECMAScript-karta som relaterar varje matris till motsvarande sträng (bokstav). Det första kodsegmentet är: