Datastrukturer och algoritmer

Träddatastruktureringshandledning för nybörjare

Träddatastruktureringshandledning för nybörjare

Introduktion

Ett träd i programvara är som ett biologiskt träd, men med följande skillnader:

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

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: