hallo Leute, Ich hoffe auf euere Hilfe
meine Aufgabe lautet:
[highlight] Implementieren Sie die nötigen Funktionen, um sortierte binäre Bäume verwenden zu können.Dafür ist zum einen die Datenstruktur zu deklarieren, und zum anderen sind Funktionen zum Einfügen von Knoten/Blättern und zur Ausgabe des Baumes erforderlich. Informieren Sie sich über die Möglichkeiten einen Suchbaum auszugeben und implementieren Sie Funktionen, dieden Baum in Preorder, Postorder und Inorder ausgeben.
Implementieren Sie zusätzlich die in der Vorlesung vorgestellte Suche in Binärbäumen rekursiv
und iterativ. Legen Sie zum Testen einen Baum an und fügen Sie 12 Werte hinzu. Nutzen Sie dann die Funktionen um nach einem Knoten
zu suchen und den Baum auszugeben. [highlight]
mein Problem ist mit REKURSIV und mit mit verschiednen ORDER klappt es nicht so gut.
ich zähle auf euere Hilfe
Ich habe nicht viel Ahnung von Programmieren, deshalb habe ich zwar angefangen aber das nicht noch nicht so toll aus.
Das Programm kann nur zahlen speichern un wieder geben.
mein code lautet foldendermassen:
* Programm zum Erstellen und Nutzen eines binaeren Baumes */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 255
struct binaer_knoten{
int ZAHL;
struct binaer_knoten *links;
struct binaer_knoten *rechts;
};
struct binaer_baum{
struct binear_knoten *wurzel;
unsigned int counter;
};
struct binaer_baum *init (void){
struct binaer_baum *baum =malloc(sizeof *baum);
if(baum == NULL) {
fprintf(stderr, "Speicherplatzmangel!!!\n");
return NULL;
}
else { /*Initialisieren*/
baum->wurzel = NULL;
baum->counter=0;
return baum;
}
}
void PrintTree (struct binear_knoten * wurzel, int * einruecken)
{
int i;
if (wurzel != NULL) /* Ist der Baum leer? Nein, dann gib ihn aus */
{
for (i=0; i<=(*einruecken); i++)
printf(" ");
printf("%d\n",wurzel->ZAHL); /* Preorder-Notation: W */
(*einruecken)++; /* vorruecken */
PrintTree(wurzel->links,einruecken); /* Preorder-Notation: L */
PrintTree(wurzel->rechts,einruecken); /* Preorder-Notation: R */
(*einruecken)--; /* zuruecksetzen */
}
return;
};
int einfuegen(struct binaer_baum *baum, unsigned int p){
struct binaer_knoten *knoten, **neu;
neu =(struct binaer_knoten **) &baum->wurzel;
knoten= (struct binaer_knoten *) baum->wurzel;
for(;;) {
if(knoten == NULL) {
/* Haben wir einen freien Platz gefunden? */
knoten = *neu =malloc(sizeof *knoten);
if(knoten != NULL) {
/* Daten einfuegen */
knoten->ZAHL = p;
knoten->links=knoten->rechts=NULL;
baum->counter++;
/* Beendet die Funktion erfolgreich. */
return 1;
}
else {
fprintf(stderr, "Speicherplatzmangel\n");
return 0;
}
}
/* Ist die aktuelle Zahl groesser? */
else if(p > knoten->ZAHL) {
/* Dann gehts rechts weiter im Baum. */
neu = &knoten->rechts;
knoten = knoten->rechts;
}
else { /* Der letzte Fall, die aktuelle ZAHL ist kleiner, */
/* dann eben nach links weiter im Baum. */
neu = &knoten->links;
knoten = knoten->links;
}
}
}
void binaere_suche_Zahl(const struct binaer_baum *baum,
unsigned int p) {
const struct binaer_knoten *knoten;
knoten = (struct binaer_knoten *) baum->wurzel;
for(;;) {
if(knoten == NULL) {
printf("Ihre gesuchte Zahl (%d) ist NICHT im binaeren Baum gefunden worden!\n",p);
return;
}
if(p == knoten->ZAHL) { /* Gefunden */
printf("Ihre gesuchte Zahl (%d) ist im binaeren Baum enthalten!\n", p);
return;
}
else if(p > knoten->ZAHL) /* Gesuchtes Element groesser: */
knoten=knoten->rechts; /* rechts am Baum weiter. */
else /* Gesuchtes Element kleiner: */
knoten=knoten->links; /* links am Baum weiter. */
}
}
int main(void) {
struct binaer_baum *re;
char o[MAX];
unsigned int p;
int wahl, r;
re = init();
if(re == NULL) {
printf("Konnte keinen neuen binaeren Baum erzeugen!\n");
return 0;
}
else
printf("Binaerbaum wurde erfolgreich initialisiert\n");
do {
printf("\n[1] Neue Zahl hinzufuegen\n");
printf("[2] Zahl suchen\n");
printf("[3] Baum ausgeben\n");
printf("[4] Ende\n\n");
printf("Ihre Wahl : ");
scanf("%d",&wahl);
if(wahl == 1) {
printf("Bitte geben Sie eine neue Zahl ein : ");
do{ scanf("%5u",&p); }while( (getchar()) != '\n' );
r=einfuegen(re,p );
if(r == 0)
return 0;
}
else if(wahl == 2) {
printf("Welche Zahl suchen Sie: ");
scanf("%5u",&p);
binaere_suche_Zahl(re, p);
}
/*else if(wahl==3){
printtree*/
} while(wahl != 4);
return 1;
}
Alles anzeigen