Ich schreibe verschiedene Operatorüberladungen für eine binäre Baumfunktion, die ich erstelle, die Spezifikationen erfordern eine Überladung für das Kopieren eines Baumes zu einem anderen.Operator überlastet in binärem Baum
binary_tree& binary_tree::operator=(const binary_tree &other)
{
return binary_tree();
}
der Test für den Bediener Arbeits als,
int main(int argc, char **argv)
{
tree = new binary_tree(vector<int>{11, 5, 3, 7});
binary_tree temp = *tree;
temp.insert(12);
str = temp.inorder();
if (str != string("3 5 7 11 12") && temp.inorder() != tree->inorder())
cerr << "test failed (assignment operator)" << endl;
else
cout << "test passed (assignment operator)" << endl;
}
folgt Offensichtlich ist der Punkt dieses Tests ist es, einen neuen Baum Temp zu erstellen, die die Werte des Originals hat, aber ich kann‘ Es scheint so zu funktionieren, dass wenn .insert (12) aufgerufen wird, es den ursprünglichen Baum nicht verändert. Der Bediener muss basierend auf dem Test arbeiten, der in main, unedited gegeben wird.
Ich habe verschiedene Dinge im Operator = ausprobiert, aber keiner von ihnen scheint irgendeinen Effekt zu haben. Ich habe Methoden wie,
void binary_tree::copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
copyTree(tree2->right, tree->right);
}
}
aber mit ihnen schien nichts nützliches zu tun.
Zeigen Sie uns etwas, was Sie ausprobiert haben. Nur zu sagen "Ich habe viele Dinge ausprobiert und sie haben nicht funktioniert; bitte schreibe meinen Code für mich" kommt selten hier gut voran, fürchte ich. –
Eine binäre Baumklasse, keine Funktion; der Zuweisungsoperator sollte einen Verweis auf "self" zurückgeben; usw. etc. – blazs
* Ich habe verschiedene Dinge im Operator = ausprobiert, aber keiner von ihnen scheint irgendeinen Effekt * zu haben. Natürlich, 'binary_tree temp = * tree;' es ruft nicht den Zuweisungsoperator auf, sondern den Kopierkonstruktor. –