Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
Und nun noch der Aufhänger für <strong>die</strong> Wurzel des Baumes:<br />
TreeNode* Wurzel; /* Zeiger auf <strong>die</strong> Baumwurzel */<br />
Da e<strong>in</strong> Baum e<strong>in</strong>e rekursive Datenstruktur ist (E<strong>in</strong> Baum besteht aus Teilbäumen), lässt sich das<br />
E<strong>in</strong>fügen von Elementen sehr elegant rekursiv lösen:<br />
void InsertNode(TreeNode **Root, TreeNode *Node)<br />
{<br />
/* Falls ke<strong>in</strong> Element, neuen Knoten Anhängen */<br />
if (*Root == NULL) {<br />
Node->Left = NULL;<br />
Node->Right = NULL;<br />
*Root = Node;<br />
} else {<br />
}<br />
}<br />
/* Prüfen ob im l<strong>in</strong>ken oder im rechten Teilbaum anhängen */<br />
if (Node->Value > (*Root)->Value) {<br />
/* Wert ist grösser, im rechten Teilbaum e<strong>in</strong>fügen */<br />
InsertNode(&( (*Root)->Right), Node);<br />
} else {<br />
/* Wert ist kle<strong>in</strong>er, im l<strong>in</strong>ken Teilbaum e<strong>in</strong>fügen */<br />
InsertNode(&( (*Root)->Left), Node);<br />
}<br />
Aufruf der E<strong>in</strong>fügeoperation:<br />
TreeNode *NewNode;<br />
NewNode = (TreeNode *) malloc( sizeof(TreeNode) );<br />
NewNode->Wert = Value;<br />
InsertNode(&Wurzel, NewNode); /* Zeiger auf Wurzel <strong>und</strong> Zeiger auf */<br />
/* neuen Knoten uebergeben */<br />
Das sortierte Ausgeben des Baum<strong>in</strong>haltes lässt sich auch sehr leicht rekursiv lösen:<br />
void Pr<strong>in</strong>tTree(TreeNode *Root)<br />
{<br />
/* Nur falls gültiges Element */<br />
if (Root != NULL) {<br />
}<br />
}<br />
/* Zuerest alle kle<strong>in</strong>eren Elemente ausgeben (l<strong>in</strong>ker Teilbaum) */<br />
Pr<strong>in</strong>tTree(Root->Left);<br />
/* Dann den Wert <strong>die</strong>ses Knotens */<br />
pr<strong>in</strong>tf("\n%d", Root->Wert);<br />
/* <strong>und</strong> dann alle grösseren Elemente ausgeben (rechter Teilbaum) */<br />
Pr<strong>in</strong>tTree(Root->Right);<br />
Aufruf der Ausgabeoperation:<br />
Pr<strong>in</strong>tTree(Wurzel);<br />
Root ist e<strong>in</strong> Zeiger auf <strong>die</strong><br />
Wurzel des aktuellen Teilbaums<br />
Node ist e<strong>in</strong> Zeiger auf den<br />
e<strong>in</strong>zufügenden Knoten<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 111/147