CodeInside
@CodeInside

Почему после преобразования ветки в бинарное дерево оно сразу же пропадает?

Есть бинарное дерево, которое представляет собой англо-русский словарь. В одном методе мне нужно преобразовать ветку в дерево.
struct Elem
{
	char eng[15]; // ключ
	char rus[15]; // значение
	Elem *left, *right, *parent;
};
Tree::Tree(Elem* node)
{
	Copy(node, root);
}

void Tree::Copy(const Elem* from, Elem* to)
{
	if (from == nullptr)
	{
		to = nullptr;
		return;
	}
	
	to = new Elem;
	strcpy_s(to->eng, 15, from->eng);
	strcpy_s(to->rus, 15, from->rus);

	cout << from->eng << '\t' << to->eng << endl;
	Copy(from->left, to->left);
	Copy(from->right, to->right);
}

Проверка:
Tree obj;
	Insert(obj);
	Tree obj2(obj.GetRoot());
	cout << obj2.GetRoot();
	_getch();

Так вот obj2.GetRoot() возвращает nullptr. Прохожу дебагером - всё отлично. Каждый узел правильно копируется в нужное место, но после отработки этого конструктора преобразования (если его можно так назвать), root сразу становится nullptr. Можете помочь отловить этот баг?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Здесь вы создаёте новый Elem в локальной переменной 'to'
to = new Elem;

После выхода из функции этот указатель теряется, а исходный root не изменяется.

Попробуйте передавать указатель по ссылке, например, так

void Tree::Copy(const Elem* from, Elem* &to)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы