?
Also das klappt jetzt soweit (mit ein paar Warnings..)
Ich habe die Funktion jetzt so geändert:
int BinCodeSuchen(struct TKnoten *pKnoten,char* wort)
{
if (pKnoten->links != NULL)
{
printf("%d",pKnoten->haufigkeit);
BinCodeSuchen(pKnoten->links,wort+'0');
BinCodeSuchen(pKnoten->rechts,wort+'1');
}
else
{
printf("%c %s",pKnoten->zeichen,wort);
}
return 0;
}
Ich habe jetzt das Problem, dass wenn ich die Häufigkeiten in meinen Baum durchgehe irgendwie nur in den rechten Teilbaum geschrieben wurde.. im linken steht immer nur der selber Wert drin.
Mein Programm soll so eine Art Huffmann Kompression werden und ich sortiere meine Knoten wie folgt:
int KnotenVerknuepfen(void)
{
struct TKnoten tempknoten;
while (maximal > 0)
{
tempknoten.links = &knotenliste[maximal-1];
tempknoten.rechts = &knotenliste[maximal];
tempknoten.haufigkeit = knotenliste[maximal].haufigkeit + knotenliste[maximal-1].haufigkeit;
printf("\nFüge Knoten zusammen : %d %d",knotenliste[maximal].haufigkeit,knotenliste[maximal-1].haufigkeit);
getch();
maximal--;
knotenliste[maximal] = tempknoten;
KnotenSortieren();
}
return 0;
}
Diese Funktion soll Knoten die in einer Liste sind zusammenfügen. Und zwar immer die mit der geringsten Häufigkeit.
Die Knoten werden anhand einer Häufigkeitstabelle mit dieser Funktion in die Knotenliste geschrieben:
maximal = -1;
for (i=0;i<=255;i++)
if (haufigkeiten[i]!=0)
{
maximal++;
knotenliste[maximal].haufigkeit= haufigkeiten[i];
knotenliste[maximal].zeichen = i;
knotenliste[maximal].rechts = NULL;
knotenliste[maximal].links = NULL;
printf ("%d %d \n",knotenliste[maximal].zeichen,knotenliste[maximal].haufigkeit);
}
Es ist schwer zu beschreiben aber ich hoffe mal das jemand mein Problem versteht und mit helfen kann!
mfg