P.roblem s.olved :)
-
Problem gElÖsT
.. weiter unten
Programm:
/* * binaererBaum.c * * Created on: 17.09.2009 * Author: c.groupe */ #include <stdio.h> #include <stdlib.h> typedef struct tree { double Element; struct tree *left; struct tree *right; } t_tree; /* Rekursives Unterprogramm zur Höhenberechnung */ int height (t_tree *xWurzel, int R, int L) { /* xWurzel = ( t_tree *) malloc(sizeof(t_tree)); if (xWurzel == NULL) printf ("Fehler bei malloc!"); else { xWurzel->Element = 0; xWurzel->left = NULL; xWurzel->right = NULL; } */ /* Tiefe der Linken Seite */ if ((xWurzel->left) != NULL) height(*left, R, L++); /* Tiefe der Rechtsn Seite */ if ((xWurzel->right) != NULL) height(*right, R++, L); /* Maximum dieser beiden Werte+1 */ if( R > L ) return R+1; else return L+1; } /* Rekursives Unterprogramm copy() */ int copy (t_tree *a, t_tree *b) { }
-
Wir wollen eigentlich nicht nur die aufgabe lösen, sondern auch diese mit hilfe von ein und ausgabe überprüfen
Dazu muessen erstmal Funktionen bereitgestellt werden, die einen Baum erstellen, z.B. makeRootNode() oder insert(RootNode, Number).
Auch ist euer Interface fuer height eher unguenstig, int height(Node) ist glaube das gewollte. In der Implementation von height muss der Rueckgabewert der height-Aufrufe natuerlich mit in die Berechnung einfliessen. Das malloc in height ist falsch, die Funktion soll doch nur bei einem gegeben Baum die Hoehe bestimmen, also nichts weiter erzeugen oder anlegen. Das Baumbeispiel ist wohl recht komplex, versuche dich doch mal an der Fakultaestfunktion oder power-Funktion (power(x,n) berechnet x^n).
-
Die rekursiven Funktionsaufrufe können so nicht funktionieren, da es weder die Variable
left
nochright
gibt.Wieso benutzt ihr zur Überprüfung nicht einfach
printf
?! Und um die ganze Sache noch besser zu verstehen, solltest ihr ein Blatt Papier nehmen, einen Baum zeichnen und den Code Schritt für Schritt - am Baum - durchgehen.
-
so..
/* * binaererBaum.c * * Created on: 17.09.2009 * Author: c.groupe */ #include <stdio.h> #include <stdlib.h> typedef struct tree { double Element; struct tree *xleft; struct tree *xright; } t_tree; int heigth(t_tree *data); t_tree * copy(t_tree *data); t_tree * invert(t_tree *data, double Element); t_tree * find(t_tree *data, double Element); /* Rekursives Unterprogramm zur Höhenberechnung */ int heigth(t_tree *data) { int erg = 0; if (data != NULL) { int left, right; /* Höhe der Linken Seite */ left = heigth(data-> xleft); /* Höhe der Rechtsn Seite */ right = heigth(data-> xright); /* Maximum dieser beiden Werte+1 */ if (left > right) erg = left +1; else erg = right +1; } return erg; } /* Rekursives Unterprogramm copy() */ t_tree * copy(t_tree *data) { t_tree * cpy = NULL; if (data != NULL) { cpy = (t_tree*) malloc(sizeof(t_tree)); cpy-> Element = data-> Element; cpy-> xleft = copy(data-> xleft); cpy-> xright = copy(data-> xright); } return cpy; }
Ok habs..