Я только что реализовал многопоточное дерево в C ++, и теперь я пытаюсь cout
все элементы по порядку.
Дерево было двоичным отсортированным деревом (не сбалансированным) до того, как я 'я проделал это.
Я пытался сделать это:
E min = _min(root); //returns the minimum element of the tree
E max = _max(root); //returns the maximum element of the tree
while (min != max)
{
std::cout << min << ", ";
min = _successor(root, min);
}
std::cout << max << ", ";
std::cout << std::endl;
, но так как дерево теперь пронизано, моя функция-преемница всегда возвращает минимум всего дерева (в основном, это происходитодин раз в правом поддереве, а затем входит в левое поддерево столько раз, сколько возможно, пока не найдет лист.) Поэтому, когда я пытаюсь вызвать эту функцию, она только cout
1 (потому что 1 является минимальным значением моегодерево).
Кроме того, я пробовал кое-что еще:
E min = _min(root); //returns min element of the tree
E max = _max(root); //returns max element of the tree
Node* tmp = _getNode(root, min); //returns the node of the specified element, therefore the minimum node of the tree
while(tmp->data < max)
{
std::cout << tmp->data << ", ";
tmp = _getNode(root, tmp->data)->rightChild; //gets the right child node of tmp
}
std::cout << tmp->data << ", ";
Однако, делая это, есть значения, которые игнорируются.(См. Изображение ниже)
(Зеленые ссылки были добавлены после создания потока дерева.) Если вы видите, например, узел № 6 никогда не посещается из самого последнего алгоритма, потому что этоне правый потомок любого узла в дереве ...
Вот вывод предыдущей функции:
1, 2, 3, 5, 7, 8, 11, 71
Кто-нибудь имеет представление о том, как я мог это исправить, или любойСоветы по моей проблеме?
Спасибо
РЕДАКТИРОВАТЬ: В конце концов мне просто пришлось пройтись по дереву от минимума до максимума И изменить мои методы _predecessor и _successor, чтобы они не регистрировалисьподдеревья с резьбой.:)
Надеюсь, это поможет будущим читателям.