Ich versuche, verschiedene Methoden zu schreiben Binärbäumen von denen zu schaffen, ist eine Kopiermethode aus einem vorhandenen binären BaumKopieren von einem binären Baum zu einem anderen
Baum von Vektor erstellen
binary_tree::binary_tree(const std::vector<int> &values)
{
for(int i = 0; i < 5; i++)
{
insert(values[i]);
}
}
einfügen Knoten
void insertnode(node **tree, int value)
{
if (*tree == nullptr)
{
*tree = new node;
(*tree)->data = value;
(*tree)->left = nullptr;
(*tree)->right = nullptr;
}
else
if(value < (*tree)->data)
{
insertnode(&(*tree)->left, value);
}
else if(value > (*tree)->data)
{
insertnode(&(*tree)->right, value);
}
else
return;
}
void binary_tree::insert(int value)
{
insertnode(&tree, value);
}
Kopieren Methode
binary_tree::binary_tree(const binary_tree &rhs)
{
copyTree(tree2, tree);
}
void copyTree(node *& tree2, node *& tree)
{
if(tree == NULL)
{
tree2 = NULL;
}
else
{
tree2 = new node;
tree2->data = tree->data;
copyTree(tree2->left, tree->left);
//cout << tree2->data << " ";
copyTree(tree2->right, tree->right);
}
}
Druckverfahren
std::string binary_tree::inorder() const
{
inorderof(tree);
std::string back2 = back.substr(0, back.length()-1);
back = "";
return std::string(back2);
void inorderof(node *tree)
{
if(tree != nullptr)
{
inorderof(tree->left);
back += to_string(tree->data);
back += " ";
inorderof(tree->right);
}
}
Haupt
int main(int argc, char **argv)
{
tree = new binary_tree(vector<int>{10, 5, 12, 15, 8});
tree->inorder();
binary_tree *tree2 = new binary_tree(*tree);
tree2->inorder();
}
Mein Problem ist, dass ich den ursprünglichen Baum kopieren - das und Druck völlig in Ordnung baut - und kopieren Sie die
binary_tree::binary_tree(const binary_tree &rhs)
mit Methode, aber ich bekomme einen ungelösten externen Fehler, wenn der Baum kopiert wird.
Ich habe versucht, den Baum zu kopieren, ohne die obige Methode zu verwenden, die funktioniert, jedoch den anfänglichen binären Baum als Argument in diese Methode übergeben zu müssen, stumpt mich und ich weiß nicht, wohin ich von dort gehen soll. Ich muss diese genaue Methodendeklaration als Teil einer Aufgabe verwenden, sonst würde ich es nicht so machen!
Fehlermeldung:
Fehler LNK2019: nicht aufgelöstes externes Symbol? "Public: void __thiscall binary_tree :: copyTree (struct node * &, struct node * &)" (copyTree @ binary_tree @@ QAEXAAPAUnode @@ 0 @ Z) in Funktion verwiesen "public: __thiscall binary_tree :: binary_tree (Klasse binary_tree const &)" (?? 0binary_tree @@ QAE @ ABV0 @@ Z)
Willkommen bei Stack Overflow. Können Sie möglicherweise die Fehlermeldung anzeigen, die Sie erhalten? (Ich glaube auch, dass dein Text abgeschnitten hat mit 'Ich habe versucht, ... ') –
Entschuldigung, ich habe den ganzen Tag daran gearbeitet und ich habe versehentlich gedrängt, ich habe es jetzt aktualisiert! Vielen Dank für jede Hilfe, die Sie mir geben können –
ist CopyTree als Mitglied von binary_tree deklariert (in der Kopfzeile)? Weil es implementiert ist (in der.cpp-Datei, wie Sie vorgestellt haben) als freie Funktion. –