Was wäre eine ordentliche Implementierung eines N-ary-Baums in C-Sprache?
Insbesondere möchte ich einen n-ären Baum implementieren, der sich nicht selbst ausbalanciert, mit einer ungebundenen Anzahl von Kindern in jedem Knoten, in dem jeder Knoten eine bereits definierte Struktur enthält, wie zum Beispiel:
struct task {
char command[MAX_LENGTH];
int required_time;
};
Mit N-ary meinen Sie einen Baum mit Fanout-Grad N? Sie müssen mehr angeben, z. B. nicht selbstausgleichender Suchbaum, Trie, B-Baum usw.
– vergänglich
10. Oktober 2008 um 1:59 Uhr
Sie haben Recht, ich werde die Frage bearbeiten, um weitere Details hinzuzufügen. Vielen Dank! Und danke auch Matt J für deine Antwort!
– mmutilva
10. Oktober 2008 um 3:05 Uhr
Remo.D
Jeder n-äre Baum kann als binärer Baum dargestellt werden, wobei in jedem Knoten der linke Zeiger auf das erste Kind und der rechte Zeiger auf den nächsten Bruder zeigt.
R R
/ | \ |
B C D B -- C -- D
/ \ | | |
E F G E -- F G
Diese Technik hat den Vorteil, dass viele Algorithmen einfacher zu schreiben sind, da sie auf einem binären Baum statt auf einer komplizierteren Datenstruktur ausgedrückt werden können.
Als ersten Durchgang könnten Sie einfach eine erstellen Struktur (nennen wir es TreeNode) mit a Aufgabesowie eine Reihe von Zeigern auf TreeNodes. Dieser Satz könnte entweder ein Array sein (if N fest ist) oder eine verkettete Liste (falls N ist variabel). Die verknüpfte Liste würde erfordern, dass Sie eine zusätzliche deklarieren Struktur (nennen wir es Listenknoten) mit einer TreeNode Zeiger auf das eigentliche Kind (Teil des Baums) und einen Zeiger auf den nächsten Listenknoten In der Liste (Null wenn am Ende der Liste).
Mit N-ary meinen Sie einen Baum mit Fanout-Grad N? Sie müssen mehr angeben, z. B. nicht selbstausgleichender Suchbaum, Trie, B-Baum usw.
– vergänglich
10. Oktober 2008 um 1:59 Uhr
Sie haben Recht, ich werde die Frage bearbeiten, um weitere Details hinzuzufügen. Vielen Dank! Und danke auch Matt J für deine Antwort!
– mmutilva
10. Oktober 2008 um 3:05 Uhr