Datové struktury a algoritmy

Výukový program stromové datové struktury pro začátečníky

Výukový program stromové datové struktury pro začátečníky

Úvod

Strom v softwaru je jako biologický strom, ale s následujícími rozdíly:

Větve softwarového stromu jsou reprezentovány přímkami. Dobrým příkladem softwarového stromu, který jste mohli použít, je adresářový strom pevného disku vašeho počítače.

Existují různé druhy stromů. Existuje obecný strom, ze kterého jsou odvozeny další stromy. Ostatní stromy jsou odvozeny zavedením omezení do obecného stromu. Můžete například chtít strom, kde z uzlu vycházejí ne více než dvě větve; takový strom by se nazýval Binární strom.  Tento článek popisuje obecný strom a způsob přístupu ke všem jeho uzlům.

Hypertextový odkaz ke stažení kódu je uveden v dolní části tohoto článku.

Abyste pochopili ukázky kódu v tomto článku, musíte mít základní znalosti jazyka JavaScript (ECMAScript). Pokud tyto znalosti nemáte, můžete je získat z http: // www.široká síť.com / ChrysanthusForcha-1 / ECMAScript-2015-Course.htm

Obecný stromový diagram


„A“ je kořenový uzel; je to uzel první úrovně. B, C, D jsou na druhém řádku; to jsou uzly druhé úrovně. E, F, G, H, I, J, K jsou na třetím řádku a jsou to uzly třetí úrovně. Čtvrtá linka by vytvořila uzly čtvrté úrovně atd.

Vlastnosti stromu

- Všechny větve pro všechny úrovně uzlů mají jeden zdroj, kterým je kořenový uzel.

- Strom má N - 1 větví, kde N je celkový počet uzlů. Výše uvedený diagram pro obecný strom má 11 uzlů a 10 větví.

- Na rozdíl od lidí, kde každé dítě má dva rodiče, se softwarovým stromem má každé dítě pouze jednoho rodiče. Kořenový uzel je největší nadřazený rodič. Rodič může mít více než jedno dítě. Každý uzel, kromě kořenového, je podřízený.

Slovník slov

Procházení všech uzlů stromu

Ke všem uzlům stromu lze přistupovat a číst nebo měnit jakoukoli hodnotu uzlu. To se však neděje svévolně. Existují tři způsoby, jak to provést, přičemž všechny zahrnují procházení hloubkou první následujícím způsobem:

1) V objednávce: Jednoduše řečeno, v tomto schématu se nejprve projde levý podstrom; poté je přístup ke kořenovému uzlu; poté je překonán pravý podstrom. Toto schéma je symbolizováno jako left-> root-> right. Obrázek 1 je zde znovu zobrazen pro snadnou orientaci:

Za předpokladu, že v každém uzlu jsou dva sourozenci; pak left-> root-> right means, you access the lower and leftmost node first, then the parent of the node, and then the right sibling. Pokud jsou více než dva sourozenci, vezměte prvního jako levého a zbytku pravých uzlů jako pravého. U obecného stromu výše je přístupný podstrom vlevo dole, aby měl [EBF]. Toto je podstrom. Rodičem tohoto podstromu je A; takže A je dále přístupný, aby měl [EBF] A. Dále se přistupuje k podstromu [GCHI], který má větší podstrom, [[EBF] A [GCHI]]. Můžete vidět levý -> kořenový -> pravý profil zobrazující sám sebe. Tento velký levý podstrom bude mít podstrom, [JDK] napravo k dokončení procházení k získání, [[EBF] A [GCHI]] [JDK].

2) Předobjednávka: Jednoduše řečeno, v tomto schématu se nejprve přistupuje ke kořenovému uzlu, poté se přejde levý podstrom a poté se projde pravý podstrom. Toto schéma je symbolizováno jako root-> left-> right. Obrázek 1 je zde znovu zobrazen pro snadnou orientaci.

Za předpokladu, že v každém uzlu jsou dva sourozenci; potom root-> left-> right means, you access first to root, then the left direct child, and then the right subsequent child. Pokud jsou více než dva sourozenci, vezměte prvního jako levého a zbytku pravých uzlů jako pravého. Nejlevnější dítě levého dítěte je další, ke kterému se přistupuje. Pro obecný strom výše je kořenový podstrom [ABCD]. Nalevo od tohoto podstromu máte podstrom [EF], který poskytuje přístupovou sekvenci [ABCD] [EF]. Napravo od tohoto většího podstromu máte dva podstromy [GHI] a [JK], které poskytují úplnou sekvenci [ABCD] [EF] [GHI] [JK]. Můžete vidět kořenový -> levý -> pravý profil zobrazující sám sebe.

3) Post-Order: Jednoduše řečeno, v tomto schématu se nejprve prochází levým podstromem, poté se prochází pravým podstromem a poté se přistupuje ke kořenu. Toto schéma je symbolizováno jako left-> right-> root. Obrázek 1 je zde znovu zobrazen pro snadnou orientaci.

U tohoto stromu jsou podstromy [EFB], [GHIC], [JKD] a [A], které tvoří sekvenci, [EFB], [GHIC], [JKD] [A]. Můžete vidět levý -> pravý -> kořenový profil zobrazující sám sebe.

Vytvoření stromu

Výše uvedený strom bude vytvořen pomocí ECMAScript, který je jako nejnovější verze JavaScriptu. Každý uzel je pole. První prvek každého uzlového pole je nadřazený uzel, jiné pole. Zbytek prvků uzlu jsou potomky uzlu, počínaje dítětem nejvíce vlevo. Existuje mapa ECMAScript, která spojuje každé pole s odpovídajícím řetězcem (písmenem). První segment kódu je: