Задача с методом обхода дерева для n-арного дерева - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть Дерево класс с частным вложенным Узлом класс. Я пытаюсь написать метод обхода, и проблема в том, что я могу распечатать только первый уровень моего дерева. Я не уверен, если что-то не так с методом обхода мю. Потому что я не вижу другого способа написать это. Я думаю, что проблема заключается в методе ins, который вставляет дочерний элемент в определенный индекс дерева. Я думаю, что я вставляю в разные объекты.

Спасибо заранее за вашу помощь

1 Ответ

0 голосов
/ 08 ноября 2019

Ваша вставка не работает. Сначала вы вставляете узлы B и C, копируя их:

_info->getChildren()[index] = childTree;

и только затем вставляете узлы D и E в исходные деревья n1_1 иn1_2. Самый простой способ как-то исправить ошибку - изменить порядок вставок:

n1_1.ins(0, n1_1_1);
n1_2.ins(0, n1_2_1);
n1.ins(0, n1_1);
n1.ins(1, n1_2);

В качестве альтернативы, вы можете вставлять узлы непосредственно в дерево. То есть сначала получите соответствующий Tree, затем вставьте в него. Сохранение синтаксиса и допущение, что некоторые члены данных являются общедоступными:

n1.ins(0, n1_1);
n1.ins(1, n1_2);

n1._info->_children[0].ins(0, n1_1_1);  // n1._info->_children[0]) is not n1_1
n1._info->_children[1].ins(1, n1_2_1);  // n1._info->_children[1]) is not n1_2

В вашем коде есть множество других проблем, которые необходимо решить. Если бы вы могли переписать его с std::unique_ptr s вместо необработанных указателей, вы разрешите многие из них.

...