Bäume: ich dreh mich im kreis
-
nach den linked lists sind wir bei den bäumen angelangt und ich stehe bustäblich im wald.
und zwar habe ich die datenstruktur eines stammbaums implementiert:
class Person{ private: string s_name; string s_gebdatum; string s_geburtsort; Person *vater, *mutter; public: Person(const string& n, const string& g, const string& go) :s_name(n), s_gebdatum(g), s_geburtsort(go) {vater = mutter = NULL;} void setVater(Person *stammb) { string name, geburtstag, geburtsort; cout << "Geben Sie ein" << endl; cout << "Name: "; cin >> name; cout << "Geburtstag: "; cin >> geburtstag; cout << "Geburtstag: "; cin >> geburtsort; stammb->vater = new Person(name, geburtstag, geburtsort); } void setMutter() { . //code wie bei setVater() } };
wenn ich jetzt ein objekt dieses stammbaums erstelle und dann vater und mutter hinzufüge muss ich ja dann wieder vater und mutter hinzufügen und dann wieder vater und mutter....
aber ich weiss doch gar nicht, wieviele väter und mütter die eine person hat....
also rekursion......aber wie stelle ich das an???
hat mir jemand einen kleinen tipp....
-
Normalerweise lässt man dann die untersten Elemente (also von dir aus gesehen die obersten) - genauso wie bei der Liste das letzte Element - auf 0 zeigen.
Edit: Außerdem empfehle ich Daten und Baum zu trennen:
class Person { // Variablen wie eben Name, Vorname, etc. // Methoden wie zB setName() }; class Stammbaum { struct StammbaumElement { Person data; Person* vater; Person* mutter; }; // Baum-Funktionen };
MfG SideWinder
-
die daten hatte ich auch erst getrennt.
aber der aufwandes ist aber schon richtig, dass ich z.b. eine funktion wie setVater immer wieder selbstaufrufend machen müsste, also:
void setVater(Person *stammb) { string name, geburtstag, geburtsort; cout << "Geben Sie ein" << endl; cout << "Name: "; cin >> name; cout << "Geburtstag: "; cin >> geburtstag; cout << "Geburtstag: "; cin >> geburtsort; stammb->vater = new Person(name, geburtstag, geburtsort); char wahl; cout << "nochmal eltern eintragen:"; cin >> wahl; if(wahl == 'j') setVater(stammb) }
aber wie kriege ich denn dann die mutter da noch unter....