www.wikidata.de-de.nina.az
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 Baume zuruckgefuhrt werden konnen oder im Fall von Spannbaumen die Ergebnisse von Graphenalgorithmen wie der Breiten oder Tiefensuche sind spielen Baume in der Informatik eine besondere Rolle Dabei konnen ausgehend von der Wurzel mehrere gleichartige Objekte miteinander verkettet werden sodass die lineare Struktur der Liste aufgebrochen wird und eine Verzweigung stattfindet Da Baume zu den meist verwendeten Datenstrukturen in der Informatik gehoren gibt es viele Spezialisierungen Datenstruktur Baum Inhaltsverzeichnis 1 Definitionen 2 Eigenschaften 3 Terminologie 4 Binarbaum 5 Programmierung 6 Siehe auch 7 Einzelnachweise 8 LiteraturDefinitionen BearbeitenBaume konnen auf verschiedene Weise definiert werden z B 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 verlauft von der Wurzel zu jedem Knoten Wenn jeder Knoten im Baum maximal zwei untergeordnete Knoten Kinder hat wird der Baum Binarbaum genannt Ein Baum ist entweder leer oder besteht aus einer Wurzel und 0 oder mehr Teilbaumen von denen jeder auch ein Baum ist Die Wurzel jedes Teilbaums ist durch eine Kante mit der Wurzel des ubergeordneten Baums verbunden Dies ist eine rekursive Definition fur Baume 1 Eigenschaften BearbeitenDer Vorteil von Baumen gegenuber linearen Strukturen wie Felder oder Listen ist der effiziente Zugriff So erfolgt beispielsweise eine Suche nur in logarithmischer Zeit gegenuber linearer Zeit bei Feldern zu Details vergleiche Artikel Binarsuche Der Vorteil von Baumen als Datenstruktur gegenuber Netzwerkstrukturen ist die geringe Anzahl der Kanten Verbindungen die gespeichert bzw berucksichtigt werden mussen Die Anzahl der Kanten des vollstandigen Graphen K n displaystyle K n nbsp entspricht der Dreieckszahl D n 1 n 2 n n 1 2 displaystyle Delta n 1 n choose 2 frac n n 1 2 nbsp Die Anzahl der Kanten in einem Baum mit der gleichen Anzahl von Knoten Objekten ist dagegen lediglich n 1 displaystyle n 1 nbsp Baume konnen wie andere Graphenstrukturen uber eine Adjazenzliste oder matrix bzw uber eine Inzidenzmatrix gespeichert werden Terminologie Bearbeiten nbsp Begriffe eines BaumsAllgemein 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 heissen Kanten Eine Kante verbindet zwei Knoten um anzuzeigen dass zwischen ihnen eine Beziehung besteht Jeder Knoten ausser 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 Es ist ublich bei den untergeordneten Knoten von Kindern und bei dem verweisenden Knoten von einem Elternteil zu sprechen 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 Genealogie entlehnten Bezeichnungen werden verwendet Hat ein Knoten selbst keine Kinder nennt man ihn ein Blatt Insbesondere sind die Begriffe der Wurzelbaume relevant Bei diesen Baumen ist die Wurzel eindeutig bestimmt Hat man eine Wurzel festgehalten lassen sich zusatzlich zu den Begriffen die man bei graphentheoretischen Baumen 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 Hohe eines Baumes ist dann die maximale Tiefe eines Knotens Ein Knoten ist ein grundlegender Bestandteil eines Baumes Er kann einen Namen haben der Schlussel genannt wird Ein Knoten kann auch zusatzliche Informationen enthalten Diese zusatzlichen Informationen werden Nutzdaten genannt Wahrend die Nutzdateninformationen fur viele Baumalgorithmen nicht von zentraler Bedeutung sind sind sie in Anwendungen die Baume verwenden haufig von entscheidender Bedeutung Ein Pfad ist eine geordnete Liste von Knoten die durch Kanten verbunden sind Ein Teilbaum ist eine zusammenhangende Menge von Knoten und Kanten die aus einem ubergeordneten Knoten und allen Nachkommen dieses ubergeordneten Knotens bestehen und selbst einen Baum bildet Die Kinder jedes Knotens sind die Wurzeln eines Teilbaums Binarbaum Bearbeiten nbsp Binarer SuchbaumEin wichtiger Spezialfall ist der Binarbaum in welchem jeder Knoten nur hochstens zwei Kinder haben darf So betragt bei Binarbaumen die Anzahl der Kinder hochstens zwei und in hohen balancierten Baumen gilt zusatzlich dass sich die Hohen des linken und rechten Teilbaums an jedem Knoten nicht zu sehr unterscheiden Bei geordneten Baumen insbesondere Suchbaumen sind die Elemente in der Baumstruktur geordnet abgelegt sodass man schnell Elemente im Baum finden kann Man unterscheidet hier weiter in binare Suchbaume mit AVL Baumen als balancierte Version und B Baumen sowie einer Variante den B Baumen Spezialisierungen von B Baumen sind wiederum 2 3 4 Baume welche oft als Rot Schwarz Baume implementiert werden Ein Spezialfall der AVL Baume sind Fibonacci Baume Sie werden vor allem bei Effizienzuberlegungen zu hohen balancierten Baumen insbesondere AVL Baumen als Extremfalle und Vergleichsobjekte herangezogen Nicht sortiert aber verschachtelt sind geometrische Baumstrukturen wie der R Baum und seine Varianten Hier werden nur diejenigen Teilbaume durchsucht die sich mit dem angefragten Bereich uberlappen Baume 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 BearbeitenDas folgende Beispiel in der Programmiersprache C zeigt die Implementierung eines ungerichteten Graphen mit Adjazenzlisten Der ungerichtete Graph wird als Klasse UndirectedGraph deklariert Bei der Ausfuhrung des Programms wird die Methode Main verwendet die auf der Konsole ausgibt ob der Graph ein Baum ist 2 using System using System Collections Generic using System Linq Deklariert die Klasse fur die Knoten des Graphen class Node public int index public string value public HashSet lt Node gt adjacentNodes new HashSet lt Node gt Menge der Nachbarknoten Deklariert die Klasse fur den ungerichteten Graphen class UndirectedGraph public HashSet lt Node gt nodes new HashSet lt Node gt Diese Methode verbindet die Knoten node1 und node2 miteinander public void ConnectNodes Node node1 Node node2 node1 adjacentNodes Add node2 node2 adjacentNodes Add node1 Diese rekursive Methode pruft ob der Graph Zyklen enthalt public bool IsCyclic Node node Dictionary lt Node bool gt areConnected Node parentNode areConnected node true Setzt den aktuellen Knoten als durchlaufen foreach Node nextNode in node adjacentNodes foreach Schleife die alle benachbarten Knoten des aktuellen Knotens durchlauft if areConnected nextNode Wenn der benachbarten Knoten noch nicht durchlaufen wurde if IsCyclic nextNode areConnected node Rekursiver Aufruf der Methode mit dem benachbarten Knoten als aktuellen Knoten return true Wenn der rekursive Aufruf true zuruckgibt else Wenn der benachbarten Knoten schon durchlaufen wurde if nextNode parentNode und der benachbarte Knoten nicht der Elternknoten ist bilden die durchlaufenen Knoten einen Zyklus return true return false Sonst enthalt der Graph keinen Zyklus Diese Methode pruft ob der Graph ein Baum ist public bool IsTree Dictionary lt Node bool gt areConnected new Dictionary lt Node bool gt foreach Node node in nodes foreach Schleife die alle Knoten des Graphen durchlauft areConnected Add node false Setzt alle Knoten als nicht durchlaufen if IsCyclic nodes ElementAt 0 areConnected null Wenn die Komponente mit dem ersten Knoten Zyklen enthalt false zuruckgeben return false foreach Node node in nodes foreach Schleife die alle Knoten des Graphen durchlauft if areConnected node Wenn ein Knoten nicht verbunden ist dann false zuruckgeben return false return true Sonst ist der Graph ein Baum class Program Hauptmethode die das Programm ausfuhrt public static void Main string args Deklariert und initialisiert 5 Knoten Node node1 new Node index 0 value A Node node2 new Node index 1 value B Node node3 new Node index 2 value C Node node4 new Node index 3 value D Node node5 new Node index 4 value E Deklariert und initialisiert ein Array mit den Knoten Node nodes node1 node2 node3 node4 node5 Erzeugt einen ungerichteten Graphen UndirectedGraph undirectedGraph new UndirectedGraph int numberOfNodes nodes Length for int i 0 i lt numberOfNodes i for Schleife die alle Knoten durchlauft undirectedGraph nodes Add nodes i Fugt die Knoten dem Graphen hinzu Verbindet Knoten des Graphen miteinander undirectedGraph ConnectNodes node2 node1 undirectedGraph ConnectNodes node1 node3 undirectedGraph ConnectNodes node1 node4 undirectedGraph ConnectNodes node4 node5 if undirectedGraph IsTree Aufruf der Methode die pruft ob der Graph ein Baum ist Console WriteLine Der Graph ist ein Baum Ausgabe auf der Konsole else Console WriteLine Der Graph ist kein Baum Ausgabe auf der Konsole Console ReadLine Siehe auch BearbeitenBaumdiagramm Feld Datentyp Liste Datenstruktur Menge Datenstruktur Stapelspeicher Warteschlange Datenstruktur Einzelnachweise Bearbeiten Runestone Interactive LLC Vocabulary and Definitions GeeksforGeeks Check if a given graph is tree or notLiteratur BearbeitenHartmut Ernst Jochen Schmidt Gerd Beneken Grundkurs Informatik Grundlagen und Konzepte fur die erfolgreiche IT Praxis Eine umfassende praxisorientierte Einfuhrung 5 Auflage Springer Wiesbaden 2015 S 523 596 Heinz Peter Gumm Manfred Sommer Einfuhrung in die Informatik 10 Aufl Oldenbourg Munchen 2013 S 372 398 Abgerufen von https de wikipedia org w index php title Baum Datenstruktur amp oldid 233630103