06.10.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!