Ozzy Ozborn
Erfahrenes Mitglied
Hi,
ich habe das Problem, dass ich gerade an einem Projekt sitze, wo ich mit Binärbäumen arbeite, in die ich aussagenlogische Formeln einfügen soll. Um am Ende die Belegung dieser Formel auszuwerten, wollte ich eine Kopie von dem Baum anlegen, und auf dem weiterarbeiten. Und genau da ist jetzt auch mein Problem.
Hier meine Baum.cpp: (alles nur die emtsprechenden Auszüge)
Baum::Baum()
: left(NULL),
right(NULL),
key() {
return;
};
Baum::Baum(const Baum &baum)
: left(baum.left ? baum.left->clone() : NULL),
right(baum.right ? baum.right->clone() : NULL),
key(baum.key) {
return;
};
Baum *Baum::clone() const {
return new Baum(*this);
};
void Baum::inorder(Baum *root)
{
if (root == NULL)
return ;
inorder(root->left); // linken Baum traversieren
cout << root->key << " "; // Schluessel ausgeben
inorder(root->right); // rechten Baum traversieren
}
und die Baum.h:
Baum *clone() const;
private: Baum *left, *right;
string key;
};
Und die Main.cpp:
Baum baum;
Read read;
// Anfang Modul 1
string f = read.einlesen();
Baum *tree = new Baum();
if (f!="") {
baum.insert(tree,f);
cout << endl << endl;
cout << "Baumstruktur (inorder)" << endl;
baum.inorder(tree); cout << endl << endl;
// Ende Modul 1
// Anfang Modul 2
Baum *tree = baum.clone();
baum.belegung();
baum.aufruf(tree);
baum.inorder(tree2);
}
Also, mein Problem ist nun, dass er den tree2 genauso verändert, wie den tree, obwohl die clone-Funktion vor der Veränderung aufgerufen wird.
Hat jemand dazu eine Idee?
Vielen Dank schon einmal für Euer Kopfzerbrechen,
MfG, Ozzy
ich habe das Problem, dass ich gerade an einem Projekt sitze, wo ich mit Binärbäumen arbeite, in die ich aussagenlogische Formeln einfügen soll. Um am Ende die Belegung dieser Formel auszuwerten, wollte ich eine Kopie von dem Baum anlegen, und auf dem weiterarbeiten. Und genau da ist jetzt auch mein Problem.
Hier meine Baum.cpp: (alles nur die emtsprechenden Auszüge)
Baum::Baum()
: left(NULL),
right(NULL),
key() {
return;
};
Baum::Baum(const Baum &baum)
: left(baum.left ? baum.left->clone() : NULL),
right(baum.right ? baum.right->clone() : NULL),
key(baum.key) {
return;
};
Baum *Baum::clone() const {
return new Baum(*this);
};
void Baum::inorder(Baum *root)
{
if (root == NULL)
return ;
inorder(root->left); // linken Baum traversieren
cout << root->key << " "; // Schluessel ausgeben
inorder(root->right); // rechten Baum traversieren
}
und die Baum.h:
Baum *clone() const;
private: Baum *left, *right;
string key;
};
Und die Main.cpp:
Baum baum;
Read read;
// Anfang Modul 1
string f = read.einlesen();
Baum *tree = new Baum();
if (f!="") {
baum.insert(tree,f);
cout << endl << endl;
cout << "Baumstruktur (inorder)" << endl;
baum.inorder(tree); cout << endl << endl;
// Ende Modul 1
// Anfang Modul 2
Baum *tree = baum.clone();
baum.belegung();
baum.aufruf(tree);
baum.inorder(tree2);
}
Also, mein Problem ist nun, dass er den tree2 genauso verändert, wie den tree, obwohl die clone-Funktion vor der Veränderung aufgerufen wird.
Hat jemand dazu eine Idee?
Vielen Dank schon einmal für Euer Kopfzerbrechen,
MfG, Ozzy