Zum Inhalt springen

„Baum (Datenstruktur)“ – Versionsunterschied

aus AufEinWort, der freien Forschung
[ungesichtete Version][ungesichtete Version]
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
[[Datei:220px-Allgemeiner-baum.png|verweis=https://de.wikipedia.org/wiki/Datei:Allgemeiner-baum.png|mini|220x220px|Datenstruktur Baum]]
[[Datenstrukturbaum]] '[[Baum]] als [[Datenstruktur]]' {{dt.-lat.}}[[Datei:220px-Allgemeiner-baum.png|verweis=https://de.wikipedia.org/wiki/Datei:Allgemeiner-baum.png|mini|220x220px|Datenstruktur Baum]]
In der [https://de.wikipedia.org/wiki/Informatik Informatik] ist ein '''Baum''' (engl. ''tree'') eine [https://de.wikipedia.org/wiki/Datenstruktur Datenstruktur] und ein [https://de.wikipedia.org/wiki/Abstrakter_Datentyp abstrakter Datentyp], mit dem sich hierarchische Strukturen abbilden lassen. Dadurch, dass einerseits viele [https://de.wikipedia.org/wiki/Kombinatorische_Optimierung kombinatorische] Probleme auf [https://de.wikipedia.org/wiki/Baum_(Graphentheorie) Bäume] zurückgeführt werden können oder (im Fall von [https://de.wikipedia.org/wiki/Spannbaum Spannbäumen]) die Ergebnisse von Graphenalgorithmen (wie der [https://de.wikipedia.org/wiki/Breitensuche Breiten-] oder [https://de.wikipedia.org/wiki/Tiefensuche Tiefensuche]) sind, spielen Bäume in der Informatik eine besondere Rolle. Dabei können ausgehend von der [https://de.wikipedia.org/wiki/Wurzel_(Graphentheorie) Wurzel]mehrere gleichartige [https://de.wikipedia.org/wiki/Entit%C3%A4t_(Informatik) Objekte] miteinander verkettet werden, sodass die lineare Struktur der Liste aufgebrochen wird und eine Verzweigung stattfindet. Da Bäume zu den meist verwendeten Datenstrukturen in der Informatik gehören, gibt es viele Spezialisierungen.
In der [[Informatik]] ist ein '''[https://de.wikipedia.org/wiki/Baum_(Datenstruktur) Baum]''' (engl. ''tree'') eine [[Datenstruktur]] und ein [https://de.wikipedia.org/wiki/Abstrakter_Datentyp abstrakter Datentyp], mit dem sich [[hierarchische]] Strukturen abbilden lassen. Dadurch, dass einerseits viele [https://de.wikipedia.org/wiki/Kombinatorische_Optimierung kombinatorische] Probleme auf [[Baum (Graphentheorie)|Bäume]] zurückgeführt werden können oder (im Fall von [https://de.wikipedia.org/wiki/Spannbaum Spannbäumen]) die Ergebnisse von Graphenalgorithmen (wie der [https://de.wikipedia.org/wiki/Breitensuche Breiten-] oder [https://de.wikipedia.org/wiki/Tiefensuche Tiefensuche]) sind, spielen Bäume in der Informatik eine besondere Rolle. Dabei können ausgehend von der [[Wurzel (Graphentheorie)|Wurzel]] mehrere gleichartige [https://de.wikipedia.org/wiki/Entit%C3%A4t_(Informatik) Objekte] miteinander verkettet werden, sodass die lineare Struktur der Liste aufgebrochen wird und eine Verzweigung stattfindet. Da Bäume zu den meist verwendeten Datenstrukturen in der Informatik gehören, gibt es viele Spezialisierungen.
== <span id="Definitionen">Definitionen</span> ==
== <span id="Definitionen">Definitionen</span> ==
<p>Bäume können auf verschiedene Weise definiert werden, z. B.</p>
<p>Bäume können auf verschiedene Weise definiert werden, z. B.</p>
#Ein Baum besteht aus einer Menge von [https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten] und einer Menge von [https://de.wikipedia.org/wiki/Kante_(Graphentheorie) Kanten], die jeweils zwei Knoten verbinden. Ein bestimmter Knoten des Baums wird als ''Wurzel'' bezeichnet. Jeder Knoten mit Ausnahme der Wurzel ist durch eine Kante mit genau einem anderen Knoten verbunden, wobei dieser Knoten der ''Elternteil'' von n ist. Ein eindeutiger ''[https://de.wikipedia.org/wiki/Pfad_(Graphentheorie) Pfad]'' verläuft von der Wurzel zu jedem Knoten. Wenn jeder Knoten im Baum maximal zwei untergeordnete Knoten (''Kinder'') hat, wird der Baum [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbaum] genannt.
#Ein Baum besteht aus einer Menge von [https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten] und einer Menge von [https://de.wikipedia.org/wiki/Kante_(Graphentheorie) Kanten], die jeweils zwei Knoten verbinden. Ein bestimmter Knoten des Baums wird als ''Wurzel'' bezeichnet. Jeder Knoten mit Ausnahme der Wurzel ist durch eine Kante mit genau einem anderen Knoten verbunden, wobei dieser Knoten der ''Elternteil'' von n ist. Ein eindeutiger ''[https://de.wikipedia.org/wiki/Pfad_(Graphentheorie) Pfad]'' verläuft von der Wurzel zu jedem Knoten. Wenn jeder Knoten im Baum maximal zwei untergeordnete Knoten (''Kinder'') hat, wird der Baum [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbaum] genannt.
#Ein Baum ist entweder leer oder besteht aus einer Wurzel und 0 oder mehr Teilbäumen, von denen jeder auch ein Baum ist. Die Wurzel jedes Teilbaums ist durch eine Kante mit der Wurzel des übergeordneten Baums verbunden. Dies ist eine [https://de.wikipedia.org/wiki/Rekursive_Definition rekursive] Definition für Bäume.<sup id="cite_ref-1" class="reference">[https://de.wikipedia.org/wiki/Baum_(Datenstruktur)#cite_note-1 [1]]</sup>
#Ein Baum ist entweder leer oder besteht aus einer Wurzel und 0 oder mehr Teilbäumen, von denen jeder auch ein Baum ist. Die Wurzel jedes Teilbaums ist durch eine Kante mit der Wurzel des übergeordneten Baums verbunden. Dies ist eine [https://de.wikipedia.org/wiki/Rekursive_Definition rekursive] Definition für Bäume.<ref><span class="reference-text">Runestone Interactive LLC: [https://runestone.academy/runestone/books/published/pythonds/Trees/VocabularyandDefinitions.html Vocabulary and Definitions]</span></ref>


== <span id="Eigenschaften">Eigenschaften</span> ==
== <span id="Eigenschaften">Eigenschaften</span> ==
Zeile 11: Zeile 11:
== <span id="Terminologie">Terminologie</span> ==
== <span id="Terminologie">Terminologie</span> ==
<p>Allgemein werden alle denkbaren Begriffe der [https://de.wikipedia.org/wiki/Graphentheorie Graphentheorie] entlehnt. Die durch die Hierarchie vorgegebenen Objekte nennt man ''[https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten]''. Typischerweise speichert jeder Knoten ausgehend von einem ersten Knoten, der ''[https://de.wikipedia.org/wiki/Wurzel_(Graphentheorie) Wurzel]'', eine Liste von Verweisen auf die ihnen untergeordneten Knoten. Diese Verweise heißen ''Kanten''. Eine ''[https://de.wikipedia.org/wiki/Kante_(Graphentheorie) Kante]'' verbindet zwei Knoten, um anzuzeigen, dass zwischen ihnen eine Beziehung besteht. Jeder Knoten außer der Wurzel ist durch genau eine eingehende Kante von einem anderen Knoten verbunden. Die Wurzel des Baums ist der einzige Knoten im Baum, der keine eingehenden Kanten hat. Jeder Knoten kann mehrere ausgehende Kanten haben.</p>
<p>Allgemein werden alle denkbaren Begriffe der [https://de.wikipedia.org/wiki/Graphentheorie Graphentheorie] entlehnt. Die durch die Hierarchie vorgegebenen Objekte nennt man ''[https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten]''. Typischerweise speichert jeder Knoten ausgehend von einem ersten Knoten, der ''[https://de.wikipedia.org/wiki/Wurzel_(Graphentheorie) Wurzel]'', eine Liste von Verweisen auf die ihnen untergeordneten Knoten. Diese Verweise heißen ''Kanten''. Eine ''[https://de.wikipedia.org/wiki/Kante_(Graphentheorie) Kante]'' verbindet zwei Knoten, um anzuzeigen, dass zwischen ihnen eine Beziehung besteht. Jeder Knoten außer der Wurzel ist durch genau eine eingehende Kante von einem anderen Knoten verbunden. Die Wurzel des Baums ist der einzige Knoten im Baum, der keine eingehenden Kanten hat. Jeder Knoten kann mehrere ausgehende Kanten haben.</p>
[[file:220px-Baum_Begriffe.svg.png|link=https://de.wikipedia.org/wiki/Datei:Baum_Begriffe.svg|220x128px]]
[[Datei:220px-Baum_Begriffe.svg.png|verweis=https://de.wikipedia.org/wiki/Datei:Baum_Begriffe.svg|mini|220x220px|Begriffe eines Baums]]
 
Es ist üblich, bei den untergeordneten Knoten von ''Kindern'' und bei dem verweisenden Knoten von einem ''Elternteil'' zu sprechen. Die Menge der Knoten, die eingehende Kanten von demselben Knoten haben, werden als ''Kinder''dieses Knotens bezeichnet. Ein Knoten ist das ''Elternteil'' aller Knoten, mit denen er mit ausgehenden Kanten verbunden ist. Knoten im Baum, die Kinder desselben Elternteils sind, werden als ''Geschwister'' bezeichnet. Auch andere der [https://de.wikipedia.org/wiki/Genealogie Genealogie] entlehnten Bezeichnungen werden verwendet. Hat ein Knoten selbst keine Kinder, nennt man ihn ein ''Blatt''.<p>Insbesondere sind die Begriffe der [https://de.wikipedia.org/wiki/Wurzelbaum Wurzelbäume] relevant: Bei diesen Bäumen ist die Wurzel eindeutig bestimmt. Hat man eine Wurzel festgehalten, lassen sich zusätzlich zu den Begriffen, die man bei graphentheoretischen Bäumen schon hat – ''[https://de.wikipedia.org/wiki/Weg_(Graphentheorie) Abstand]'', ''[https://de.wikipedia.org/wiki/Teilgraph Teilbaum]'', ''[https://de.wikipedia.org/wiki/Grad_(Graphentheorie)#Gerichtete_Graphen Knotengrad]'', ''[https://de.wikipedia.org/wiki/Isomorphie_von_Graphen Isomorphie]'' –, noch Folgendes definieren: Die ''Tiefe'' eines Knotens gibt an, wie viele Kanten er von der Wurzel entfernt ist. Die Wurzel hat die Tiefe 0. Die Knoten mit derselben Tiefe bilden zusammen eine ''Ebene'' oder ein ''Niveau''. Die ''[https://de.wikipedia.org/wiki/H%C3%B6he_(Graphentheorie) Höhe]'' eines Baumes ist dann die maximale Tiefe eines Knotens.</p>
Begriffe eines Baums<p>Es ist üblich, bei den untergeordneten Knoten von ''Kindern'' und bei dem verweisenden Knoten von einem ''Elternteil'' zu sprechen. Die Menge der Knoten, die eingehende Kanten von demselben Knoten haben, werden als ''Kinder''dieses Knotens bezeichnet. Ein Knoten ist das ''Elternteil'' aller Knoten, mit denen er mit ausgehenden Kanten verbunden ist. Knoten im Baum, die Kinder desselben Elternteils sind, werden als ''Geschwister'' bezeichnet. Auch andere der [https://de.wikipedia.org/wiki/Genealogie Genealogie] entlehnten Bezeichnungen werden verwendet. Hat ein Knoten selbst keine Kinder, nennt man ihn ein ''Blatt''.</p>
<p>Insbesondere sind die Begriffe der [https://de.wikipedia.org/wiki/Wurzelbaum Wurzelbäume] relevant: Bei diesen Bäumen ist die Wurzel eindeutig bestimmt. Hat man eine Wurzel festgehalten, lassen sich zusätzlich zu den Begriffen, die man bei graphentheoretischen Bäumen schon hat – ''[https://de.wikipedia.org/wiki/Weg_(Graphentheorie) Abstand]'', ''[https://de.wikipedia.org/wiki/Teilgraph Teilbaum]'', ''[https://de.wikipedia.org/wiki/Grad_(Graphentheorie)#Gerichtete_Graphen Knotengrad]'', ''[https://de.wikipedia.org/wiki/Isomorphie_von_Graphen Isomorphie]'' –, noch Folgendes definieren: Die ''Tiefe'' eines Knotens gibt an, wie viele Kanten er von der Wurzel entfernt ist. Die Wurzel hat die Tiefe 0. Die Knoten mit derselben Tiefe bilden zusammen eine ''Ebene'' oder ein ''Niveau''. Die ''[https://de.wikipedia.org/wiki/H%C3%B6he_(Graphentheorie) Höhe]'' eines Baumes ist dann die maximale Tiefe eines Knotens.</p>
<p>Ein ''Knoten'' ist ein grundlegender Bestandteil eines Baumes. Er kann einen Namen haben, der ''Schlüssel'' genannt wird. Ein Knoten kann auch zusätzliche Informationen enthalten. Diese zusätzlichen Informationen werden ''[https://de.wikipedia.org/wiki/Nutzdaten Nutzdaten]'' genannt. Während die Nutzdateninformationen für viele Baumalgorithmen nicht von zentraler Bedeutung sind, sind sie in Anwendungen, die Bäume verwenden, häufig von entscheidender Bedeutung.</p>
<p>Ein ''Knoten'' ist ein grundlegender Bestandteil eines Baumes. Er kann einen Namen haben, der ''Schlüssel'' genannt wird. Ein Knoten kann auch zusätzliche Informationen enthalten. Diese zusätzlichen Informationen werden ''[https://de.wikipedia.org/wiki/Nutzdaten Nutzdaten]'' genannt. Während die Nutzdateninformationen für viele Baumalgorithmen nicht von zentraler Bedeutung sind, sind sie in Anwendungen, die Bäume verwenden, häufig von entscheidender Bedeutung.</p>
<p>Ein ''[https://de.wikipedia.org/wiki/Pfad_(Graphentheorie) Pfad]'' ist eine geordnete [https://de.wikipedia.org/wiki/Liste_(Datenstruktur) Liste] von Knoten, die durch Kanten verbunden sind. Ein ''Teilbaum'' ist eine zusammenhängende [https://de.wikipedia.org/wiki/Menge_(Mathematik) Menge] von Knoten und Kanten, die aus einem übergeordneten Knoten und allen Nachkommen dieses übergeordneten Knotens bestehen und selbst einen Baum bildet. Die Kinder jedes Knotens sind die Wurzeln eines Teilbaums.</p>
<p>Ein ''[https://de.wikipedia.org/wiki/Pfad_(Graphentheorie) Pfad]'' ist eine geordnete [https://de.wikipedia.org/wiki/Liste_(Datenstruktur) Liste] von Knoten, die durch Kanten verbunden sind. Ein ''Teilbaum'' ist eine zusammenhängende [https://de.wikipedia.org/wiki/Menge_(Mathematik) Menge] von Knoten und Kanten, die aus einem übergeordneten Knoten und allen Nachkommen dieses übergeordneten Knotens bestehen und selbst einen Baum bildet. Die Kinder jedes Knotens sind die Wurzeln eines Teilbaums.</p>


== <span id="Binärbaum">Binärbaum</span> ==
== <span id="Binärbaum">Binärbaum</span> ==
<p>Ein wichtiger Spezialfall ist der [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbaum], in welchem jeder Knoten nur höchstens zwei Kinder haben darf. So beträgt bei [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbäumen] die Anzahl der Kinder höchstens zwei und in [https://de.wikipedia.org/wiki/Balancierter_Baum#H%C3%B6henbalance höhen-balancierten Bäumen] gilt zusätzlich, dass sich die [https://de.wikipedia.org/wiki/H%C3%B6he_(Graphentheorie) Höhen] des linken und rechten Teilbaums an jedem [https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten] nicht zu sehr unterscheiden.</p>[[file:220px-BinärBaum_Suchbaum.jpg|link=https://de.wikipedia.org/wiki/Datei:Bin%C3%A4rBaum_Suchbaum.jpg|220x208px]][https://de.wikipedia.org/wiki/Bin%C3%A4rer_Suchbaum Binärer Suchbaum]<p>Bei geordneten Bäumen, insbesondere [https://de.wikipedia.org/wiki/Suchbaum Suchbäumen], sind die Elemente in der Baumstruktur [https://de.wikipedia.org/wiki/Ordnungsrelation geordnet] abgelegt, sodass man schnell Elemente im Baum finden kann. Man unterscheidet hier weiter in [https://de.wikipedia.org/wiki/Bin%C3%A4rer_Suchbaum binäre Suchbäume] mit [https://de.wikipedia.org/wiki/AVL-Baum AVL-Bäumen] als balancierte Version und [https://de.wikipedia.org/wiki/B-Baum B-Bäumen] sowie einer Variante, den [https://de.wikipedia.org/wiki/B*-Baum B*-Bäumen]. Spezialisierungen von B-Bäumen sind wiederum [https://de.wikipedia.org/wiki/2-3-4-Baum 2-3-4-Bäume], welche oft als [https://de.wikipedia.org/wiki/Rot-Schwarz-Baum Rot-Schwarz-Bäume] implementiert werden.</p><p>Ein Spezialfall der AVL-Bäume sind [https://de.wikipedia.org/wiki/Fibonacci-Baum Fibonacci-Bäume]. Sie werden vor allem bei Effizienzüberlegungen zu höhen-balancierten Bäumen, insbesondere AVL-Bäumen, als Extremfälle und Vergleichsobjekte herangezogen.</p><p>Nicht sortiert, aber „verschachtelt“ sind geometrische Baumstrukturen wie der [https://de.wikipedia.org/wiki/R-Baum R-Baum] und seine Varianten. Hier werden nur diejenigen Teilbäume durchsucht, die sich mit dem angefragten Bereich überlappen.</p><p>Bäume sind in ihrem Aufbau zwar mehrdimensional jedoch in der Verkettung der Objekte oft unidirektional. Die Verkettung der gespeicherten Objekte beginnt bei der Wurzel des Baums und von dort in Richtung der Knoten des Baums.</p>
<p>Ein wichtiger Spezialfall ist der [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbaum], in welchem jeder Knoten nur höchstens zwei Kinder haben darf. So beträgt bei [https://de.wikipedia.org/wiki/Bin%C3%A4rbaum Binärbäumen] die Anzahl der Kinder höchstens zwei und in [https://de.wikipedia.org/wiki/Balancierter_Baum#H%C3%B6henbalance höhen-balancierten Bäumen] gilt zusätzlich, dass sich die [https://de.wikipedia.org/wiki/H%C3%B6he_(Graphentheorie) Höhen] des linken und rechten Teilbaums an jedem [https://de.wikipedia.org/wiki/Knoten_(Graphentheorie) Knoten] nicht zu sehr unterscheiden.</p>
[[Datei:220px-BinärBaum_Suchbaum.jpg|verweis=https://de.wikipedia.org/wiki/Datei:Bin%C3%A4rBaum_Suchbaum.jpg|mini|220x220px|[https://de.wikipedia.org/wiki/Bin%C3%A4rer_Suchbaum Binärer Suchbaum]]]
Bei geordneten Bäumen, insbesondere [https://de.wikipedia.org/wiki/Suchbaum Suchbäumen], sind die Elemente in der Baumstruktur [https://de.wikipedia.org/wiki/Ordnungsrelation geordnet] abgelegt, sodass man schnell Elemente im Baum finden kann. Man unterscheidet hier weiter in [https://de.wikipedia.org/wiki/Bin%C3%A4rer_Suchbaum binäre Suchbäume] mit [https://de.wikipedia.org/wiki/AVL-Baum AVL-Bäumen] als balancierte Version und [https://de.wikipedia.org/wiki/B-Baum B-Bäumen] sowie einer Variante, den [https://de.wikipedia.org/wiki/B*-Baum B*-Bäumen]. Spezialisierungen von B-Bäumen sind wiederum [https://de.wikipedia.org/wiki/2-3-4-Baum 2-3-4-Bäume], welche oft als [https://de.wikipedia.org/wiki/Rot-Schwarz-Baum Rot-Schwarz-Bäume] implementiert werden.<p>Ein Spezialfall der AVL-Bäume sind [https://de.wikipedia.org/wiki/Fibonacci-Baum Fibonacci-Bäume]. Sie werden vor allem bei Effizienzüberlegungen zu höhen-balancierten Bäumen, insbesondere AVL-Bäumen, als Extremfälle und Vergleichsobjekte herangezogen.</p><p>Nicht sortiert, aber „verschachtelt“ sind geometrische Baumstrukturen wie der [https://de.wikipedia.org/wiki/R-Baum R-Baum] und seine Varianten. Hier werden nur diejenigen Teilbäume durchsucht, die sich mit dem angefragten Bereich überlappen.</p><p>Bäume sind in ihrem Aufbau zwar mehrdimensional jedoch in der Verkettung der Objekte oft unidirektional. Die Verkettung der gespeicherten Objekte beginnt bei der Wurzel des Baums und von dort in Richtung der Knoten des Baums.</p>
== <span id="Programmierung">Programmierung</span> ==
== <span id="Programmierung">Programmierung</span> ==
<p>Das folgende Beispiel in der [https://de.wikipedia.org/wiki/Programmiersprache Programmiersprache] [https://de.wikipedia.org/wiki/C-Sharp C#] zeigt die Implementierung eines ungerichteten Graphen mit [https://de.wikipedia.org/wiki/Adjazenzliste Adjazenzlisten]. Der ungerichtete Graph wird als [https://de.wikipedia.org/wiki/Klasse_(Objektorientierung) Klasse] ''UndirectedGraph'' deklariert. Bei der Ausführung des Programms wird die [https://de.wikipedia.org/wiki/Methode_(Programmierung) Methode] ''Main''verwendet, die auf der Konsole ausgibt, ob der Graph ein Baum ist.<sup id="cite_ref-2" class="reference">[https://de.wikipedia.org/wiki/Baum_(Datenstruktur)#cite_note-2 [2]]</sup></p><div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" dir="ltr" lang="de">
<p>Das folgende Beispiel in der [https://de.wikipedia.org/wiki/Programmiersprache Programmiersprache] [https://de.wikipedia.org/wiki/C-Sharp C#] zeigt die Implementierung eines ungerichteten Graphen mit [https://de.wikipedia.org/wiki/Adjazenzliste Adjazenzlisten]. Der ungerichtete Graph wird als [https://de.wikipedia.org/wiki/Klasse_(Objektorientierung) Klasse] ''UndirectedGraph'' deklariert. Bei der Ausführung des Programms wird die [https://de.wikipedia.org/wiki/Methode_(Programmierung) Methode] ''Main''verwendet, die auf der Konsole ausgibt, ob der Graph ein Baum ist.<ref><span class="reference-text">GeeksforGeeks: [https://www.geeksforgeeks.org/check-given-graph-tree/ Check if a given graph is tree or not]</span></ref></p><div id="mw-content-text" class="mw-body-content">
== <span id="Siehe_auch">Siehe auch</span> ==
siehe den Programmcode auf Wikipedia<div class="mw-content-ltr mw-parser-output" dir="ltr" lang="de">
== <span id="Siehe_auch">—Sh ach</span> ==


*[https://de.wikipedia.org/wiki/Baumdiagramm Baumdiagramm]
*[https://de.wikipedia.org/wiki/Baumdiagramm Baumdiagramm]
Zeile 31: Zeile 32:
*[https://de.wikipedia.org/wiki/Warteschlange_(Datenstruktur) Warteschlange (Datenstruktur)]
*[https://de.wikipedia.org/wiki/Warteschlange_(Datenstruktur) Warteschlange (Datenstruktur)]


== <span id="Einzelnachweise">Einzelnachweise</span> ==
=== <span id="Literatur">[[—Ltrtr]]</span> ===
 
#<span class="reference-text">Runestone Interactive LLC: [https://runestone.academy/runestone/books/published/pythonds/Trees/VocabularyandDefinitions.html Vocabulary and Definitions]</span>
#<span class="reference-text">GeeksforGeeks: [https://www.geeksforgeeks.org/check-given-graph-tree/ Check if a given graph is tree or not]</span>
 
== <span id="Literatur">Literatur</span> ==
 
*Hartmut Ernst, Jochen Schmidt, Gerd Beneken: ''Grundkurs Informatik. Grundlagen und Konzepte für die erfolgreiche IT-Praxis – Eine umfassende, praxisorientierte Einführung'', 5. Auflage, Springer, Wiesbaden 2015, S. 523–596
*Hartmut Ernst, Jochen Schmidt, Gerd Beneken: ''Grundkurs Informatik. Grundlagen und Konzepte für die erfolgreiche IT-Praxis – Eine umfassende, praxisorientierte Einführung'', 5. Auflage, Springer, Wiesbaden 2015, S. 523–596
*Heinz-Peter Gumm, Manfred Sommer: ''Einführung in die Informatik'', 10. Aufl., Oldenbourg, München 2013, S. 372–398
*Heinz-Peter Gumm, Manfred Sommer: ''Einführung in die Informatik'', 10. Aufl., Oldenbourg, München 2013, S. 372–398
</div></div><div id="catlinks" class="catlinks" data-mw="interface"></div>
</div>
 
=== <span id="Einzelnachweise">[[—Enzlnchwse]]</span> ===
</div><div id="catlinks" class="catlinks" data-mw="interface"></div>

Version vom 29. März 2024, 11:14 Uhr

Datenstrukturbaum 'Baum als Datenstruktur' Vorlage:dt.-lat.

Datenstruktur Baum

In der Informatik ist ein Baum (engl. tree) eine Datenstruktur und ein abstrakter Datentyp, mit dem sich hierarchische Strukturen abbilden lassen. Dadurch, dass einerseits viele kombinatorische Probleme auf Bäume zurückgeführt werden können oder (im Fall von Spannbäumen) die Ergebnisse von Graphenalgorithmen (wie der Breiten- oder Tiefensuche) sind, spielen Bäume in der Informatik eine besondere Rolle. Dabei können ausgehend von der Wurzel mehrere gleichartige Objekte miteinander verkettet werden, sodass die lineare Struktur der Liste aufgebrochen wird und eine Verzweigung stattfindet. Da Bäume zu den meist verwendeten Datenstrukturen in der Informatik gehören, gibt es viele Spezialisierungen.

Definitionen

Bäume können auf verschiedene Weise definiert werden, z. B.

  1. Ein Baum besteht aus einer Menge von Knoten und einer Menge von Kanten, die jeweils zwei Knoten verbinden. Ein bestimmter Knoten des Baums wird als Wurzel bezeichnet. Jeder Knoten mit Ausnahme der Wurzel ist durch eine Kante mit genau einem anderen Knoten verbunden, wobei dieser Knoten der Elternteil von n ist. Ein eindeutiger Pfad verläuft von der Wurzel zu jedem Knoten. Wenn jeder Knoten im Baum maximal zwei untergeordnete Knoten (Kinder) hat, wird der Baum Binärbaum genannt.
  2. Ein Baum ist entweder leer oder besteht aus einer Wurzel und 0 oder mehr Teilbäumen, von denen jeder auch ein Baum ist. Die Wurzel jedes Teilbaums ist durch eine Kante mit der Wurzel des übergeordneten Baums verbunden. Dies ist eine rekursive Definition für Bäume.[1]

Eigenschaften

Der Vorteil von Bäumen gegenüber linearen Strukturen wie Felder oder Listen ist der effiziente Zugriff. So erfolgt beispielsweise eine Suche nur in logarithmischer Zeit gegenüber linearer Zeit bei Feldern (zu Details vergleiche Artikel Binärsuche). Der Vorteil von Bäumen als Datenstruktur gegenüber Netzwerkstrukturen ist die geringe Anzahl der Kanten (Verbindungen), die gespeichert bzw. berücksichtigt werden müssen. Die Anzahl der Kanten des vollständigen Graphen 𝐾𝑛 entspricht der Dreieckszahl

. Die Anzahl der Kanten in einem Baum mit der gleichen Anzahl von Knoten (Objekten) ist dagegen lediglich 𝑛 – 1.

Terminologie

Allgemein werden alle denkbaren Begriffe der Graphentheorie entlehnt. Die durch die Hierarchie vorgegebenen Objekte nennt man Knoten. Typischerweise speichert jeder Knoten ausgehend von einem ersten Knoten, der Wurzel, eine Liste von Verweisen auf die ihnen untergeordneten Knoten. Diese Verweise heißen Kanten. Eine Kante verbindet zwei Knoten, um anzuzeigen, dass zwischen ihnen eine Beziehung besteht. Jeder Knoten außer der Wurzel ist durch genau eine eingehende Kante von einem anderen Knoten verbunden. Die Wurzel des Baums ist der einzige Knoten im Baum, der keine eingehenden Kanten hat. Jeder Knoten kann mehrere ausgehende Kanten haben.

Begriffe eines Baums

Es ist üblich, bei den untergeordneten Knoten von Kindern und bei dem verweisenden Knoten von einem Elternteil zu sprechen. Die Menge der Knoten, die eingehende Kanten von demselben Knoten haben, werden als Kinderdieses Knotens bezeichnet. Ein Knoten ist das Elternteil aller Knoten, mit denen er mit ausgehenden Kanten verbunden ist. Knoten im Baum, die Kinder desselben Elternteils sind, werden als Geschwister bezeichnet. Auch andere der Genealogie entlehnten Bezeichnungen werden verwendet. Hat ein Knoten selbst keine Kinder, nennt man ihn ein Blatt.

Insbesondere sind die Begriffe der Wurzelbäume relevant: Bei diesen Bäumen ist die Wurzel eindeutig bestimmt. Hat man eine Wurzel festgehalten, lassen sich zusätzlich zu den Begriffen, die man bei graphentheoretischen Bäumen schon hat – Abstand, Teilbaum, Knotengrad, Isomorphie –, noch Folgendes definieren: Die Tiefe eines Knotens gibt an, wie viele Kanten er von der Wurzel entfernt ist. Die Wurzel hat die Tiefe 0. Die Knoten mit derselben Tiefe bilden zusammen eine Ebene oder ein Niveau. Die Höhe eines Baumes ist dann die maximale Tiefe eines Knotens.

Ein Knoten ist ein grundlegender Bestandteil eines Baumes. Er kann einen Namen haben, der Schlüssel genannt wird. Ein Knoten kann auch zusätzliche Informationen enthalten. Diese zusätzlichen Informationen werden Nutzdaten genannt. Während die Nutzdateninformationen für viele Baumalgorithmen nicht von zentraler Bedeutung sind, sind sie in Anwendungen, die Bäume verwenden, häufig von entscheidender Bedeutung.

Ein Pfad ist eine geordnete Liste von Knoten, die durch Kanten verbunden sind. Ein Teilbaum ist eine zusammenhängende Menge von Knoten und Kanten, die aus einem übergeordneten Knoten und allen Nachkommen dieses übergeordneten Knotens bestehen und selbst einen Baum bildet. Die Kinder jedes Knotens sind die Wurzeln eines Teilbaums.

Binärbaum

Ein wichtiger Spezialfall ist der Binärbaum, in welchem jeder Knoten nur höchstens zwei Kinder haben darf. So beträgt bei Binärbäumen die Anzahl der Kinder höchstens zwei und in höhen-balancierten Bäumen gilt zusätzlich, dass sich die Höhen des linken und rechten Teilbaums an jedem Knoten nicht zu sehr unterscheiden.

Binärer Suchbaum

Bei geordneten Bäumen, insbesondere Suchbäumen, sind die Elemente in der Baumstruktur geordnet abgelegt, sodass man schnell Elemente im Baum finden kann. Man unterscheidet hier weiter in binäre Suchbäume mit AVL-Bäumen als balancierte Version und B-Bäumen sowie einer Variante, den B*-Bäumen. Spezialisierungen von B-Bäumen sind wiederum 2-3-4-Bäume, welche oft als Rot-Schwarz-Bäume implementiert werden.

Ein Spezialfall der AVL-Bäume sind Fibonacci-Bäume. Sie werden vor allem bei Effizienzüberlegungen zu höhen-balancierten Bäumen, insbesondere AVL-Bäumen, als Extremfälle und Vergleichsobjekte herangezogen.

Nicht sortiert, aber „verschachtelt“ sind geometrische Baumstrukturen wie der R-Baum und seine Varianten. Hier werden nur diejenigen Teilbäume durchsucht, die sich mit dem angefragten Bereich überlappen.

Bäume sind in ihrem Aufbau zwar mehrdimensional jedoch in der Verkettung der Objekte oft unidirektional. Die Verkettung der gespeicherten Objekte beginnt bei der Wurzel des Baums und von dort in Richtung der Knoten des Baums.

Programmierung

Das folgende Beispiel in der Programmiersprache C# zeigt die Implementierung eines ungerichteten Graphen mit Adjazenzlisten. Der ungerichtete Graph wird als Klasse UndirectedGraph deklariert. Bei der Ausführung des Programms wird die Methode Mainverwendet, die auf der Konsole ausgibt, ob der Graph ein Baum ist.[2]

siehe den Programmcode auf Wikipedia

—Sh ach

  • Hartmut Ernst, Jochen Schmidt, Gerd Beneken: Grundkurs Informatik. Grundlagen und Konzepte für die erfolgreiche IT-Praxis – Eine umfassende, praxisorientierte Einführung, 5. Auflage, Springer, Wiesbaden 2015, S. 523–596
  • Heinz-Peter Gumm, Manfred Sommer: Einführung in die Informatik, 10. Aufl., Oldenbourg, München 2013, S. 372–398
  1. ↑ Runestone Interactive LLC: Vocabulary and Definitions
  2. ↑ GeeksforGeeks: Check if a given graph is tree or not