Binärbaum mit n-i Verzweigungen?
-
Hey_
Wie kann man in ANSI C eigendlich einen Binärbaum basteln der erst 5 Verzweigungen hat und diese dann 4 mal verzweigen u.s.w.?
-
Optimiezer schrieb:
[...]einen Binärbaum [...] 5 Verzweigungen[...]
-
Na anstelle der beiden Zeiger links/rechts (beim Binärbaum) machst du jetzt halt n Zeiger auf die Kinder. Z.B. so:
struct tree { T data; size_t n_children; struct tree **children; };
-
binär (v. lat. bini, „je zwei“ bzw. bina, „paarweise“)
Dann ist es leider nur noch ein Baum.
-
Euren Aussagen entnehme ich mal das die Binärbäume Binärbäume heißen weil sie 2 Kinder haben.
Also entweder bin ich dumm oder... ich verstehe nicht wie mir deine tree struktur helfen kann...
Könntest du das für mich vll noch ein bisschen ausführen?
-
willst du nen baum oder nen "BINÄR" baum???
BINÄRBAUM:
struct tree { T data; //Daten des knten struct tree *pRightChild; struct tree *pLeftChild; };
BAUM:
struct tree { T data; //Daten des knten unsigned int iChilds; struct tree **pLeftChild; (Pointer of array of Childs) };
-
Also: ein Binärbaum hat immer(maximal) 2 Kinder. Ein "allgemeiner" Baum kann mehr haben je nach Definition.
Wenn Du einen Baum mit 5 Kindern definierst dann hat der eben 5 Kinden.
In der Struktur des Baums im voriren Posting ist mitstruct tree **pLeftChild;
ein die Möglichkeit gegeben beliebig viele Kinder einzusetzen.
Mitstruct tree Childs[5];
erzeugst Du genau 5 Kinder erzeugen.
Vielleicht könntest Du mal Deine Aufgebenstellung erläutern, evtl kann man das anders lösen. Denn ein Baum mit 5 und dann mit 4 Kindern ist ehr ungewöhnlich und müsste wohl von dir ausprogrammiert werden.
-
Zu dem Baum mit den beliebig vielen Kindern:
struct tree { T data; //Daten des knten unsigned int iChilds; struct tree **pLeftChild; (Pointer of array of Childs) };
Hier musst du mit malloc() ein Array anlegen.
struct tree *t = malloc(sizeof(*t)); t->iChilds = 5; t->pLeftChild = malloc(t->iChilds*sizeof(struct tree*));
damit ist
t->pLeftChild[0] : Zeiger auf das erste Kind t->pLeftChild[1] : Zeiger auf das zweite Kind ... t->pLeftChild[t->iChilds-1] : Zeiger auf das letzte Kind
Ist das nun klar? oder hast du noch weitere Fragen?
Gruß mcr
PS: zu jedem malloc brauchst du ein free() um den Speicher wieder freizugeben,
wenn du ihn nicht mehr brauchst.
-
ach so, mit einem dynamischen Array. Jetzt habe ich es verstanden,
dank euch allen