Я пытаюсь написать различные методы для создания бинарных деревьев, один из которых является метод копирования из существующего двоичного дереваКопирование из одного двоичного дерева к другому
Создать дерево из вектора
binary_tree::binary_tree(const std::vector<int> &values)
{
for(int i = 0; i < 5; i++)
{
insert(values[i]);
}
}
Вставка узлы
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);
}
метод Копирование
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);
}
}
Способ печати
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);
}
}
Главная
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();
}
Моя проблема заключается в том, что я должен скопировать начальное дерево - который строит и печатает прекрасно - и скопировать его с помощью
binary_tree::binary_tree(const binary_tree &rhs)
метод, однако я получаю некоторую нерешенную внешнюю ошибку, когда дерево копируется.
Я попытался скопировать дерево без использования вышеописанного метода, который работает, однако, чтобы передать исходное двоичное дерево через аргумент в этот метод, пень меня, и я не знаю, куда идти оттуда. Я должен использовать это объявление точного метода как часть назначения, иначе я бы этого не делал!
сообщение об ошибке:
ошибка LNK2019: неразрешенный внешний символ? "Общественность: пустота __thiscall binary_tree :: copyTree (структура узла * &, структура узла * &)" (copyTree @ binary_tree @@ QAEXAAPAUnode @@ 0 @ Z) ссылка в функции "общественность: __thiscall binary_tree :: binary_tree (класс binary_tree Const &)" (?? 0binary_tree @@ QAE @ ABV0 @@ Z)
Добро пожаловать в Переполнение стека. Не могли бы вы показать сообщение об ошибке, которое вы получаете? (Также я считаю, что ваш текст отключен с 'я пытался ...) –
Извините, что я работал над этим весь день, и я нажал отправить по ошибке, я обновил его сейчас! Спасибо за любую помощь, которую вы можете мне дать. –
is copyTree объявлен (в заголовке) членом binary_tree? Потому что он реализован (в.cpp file, как вы представили) в качестве бесплатной функции. –