в BST я копирую узел в другой узел и удаляю первый узел и возвращаю скопированный узел, но скопированные значения узла являются мусором - PullRequest
0 голосов
/ 21 апреля 2019

хорошо, поэтому в C ++ BST я пытаюсь удалить узел и вернуть значения в узле.то, что я делаю, это установка x node = node для удаления.поэтому, когда я удаляю узел и возвращаю x и отображаю его значения, в нем есть некоторые значения мусора.

BSTNode* x=n;

x->set_id(n->get_id());

x->set_price(n->get_price());

x->set_quantity(n->get_quantity());

BSTNode* temp = find_prev(n, root);

if (n->get_id() <= root->get_id())
{

  temp->set_left(n->get_left());

}

else if (n->get_id() >= root->get_id())
{

  temp->set_right(n->get_right());

}

delete n;

return x;

Я ожидаю, что выходной результат будет некоторым значением, но он показывает значения мусора.

1 Ответ

0 голосов
/ 22 апреля 2019

BSTNode* x=n; не создает новый узел. Он объявляет новый указатель, указывающий на тот же узел. x->set_id(n->get_id()); тогда абсолютно ничего не делает - он читает значение из узла и возвращает его обратно в тот же самый узел, который, конечно, уже имеет это значение.

Более того, после delete n;, x становится висящим указателем, указывающим на узел, который уже был удален. Любая попытка использовать x впоследствии ведет к неопределенному поведению.

Если вы хотите создать новый узел с теми же данными, что и исходный, вы, вероятно, захотите BSTNode* x = new BSTNode(*n);. Предполагая, что BSTNode имеет подходящий конструктор копирования.


Однако смысл этого упражнения неясен. Почему вы снова хотите создать новый узел, скопировать данные и удалить оригинал? Это кажется довольно бессмысленным - в конце концов, вы правы, если начинаете, с одного узла, несущего определенные данные. Почему вы не можете просто продолжать использовать оригинальный узел?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...