Обнаружение дубликатов двоичного дерева поиска и устранение коллизий ⇐ C++
Обнаружение дубликатов двоичного дерева поиска и устранение коллизий
Я пытаюсь вставить узел в дерево двоичного поиска. Кроме того, если при попытке вставки я столкнусь с дубликатом, я должен добавить один новый ListNode в список внутри этого узла дерева с номером строки, в которой был обнаружен новый повторяющийся элемент. (есть входной файл, который отлично работает)
Не уверен, но может быть проблема с копированием указателя?
Вот мой код со структурами узла и проблемной процедурой:
struct Node { Узел* родительский {nullptr}; Узел* слева {nullptr}; Узел* справа {nullptr}; Данные Carplate*{}; ListNode* head {nullptr}; }; struct ListNode { std::uint32_t line_number{}; ListNode* next{nullptr}; ListNode(std::uint32_t номер, ListNode* nextNode = nullptr): line_number{номер}, следующий{следующийузел} {} }; void push(ListNode* head, std::uint32_t line_number) { while (head->next != nullptr) голова = голова-> следующий; head->next = новый ListNode(line_number); возвращаться; } нужно исправить (ниже):
void Insert(Node* &root, const std::string& text, std::uint32_t line_number) { Узел * newNode {новый узел {} }; newNode->data = getCarplate(text); newNode->head = новый ListNode(line_number); если (!корень) { корень = новыйузел; возвращаться; } bool nodeIsPlaced {ложь}; Узел* текущий {корень}; while (nodeIsPlaced == false) { if (текущий->данные == newNode->данные) { std::cout head, line_number); узелIsPlaced = правда; } иначе, если (newNode->данные > текущие->данные) { if (текущий->right != nullptr) { текущий = текущий-> вправо; std::cout вправо = новый узел; узелIsPlaced = правда; } } иначе, если (newNode->данные данные) { if (текущий->left != nullptr) { текущий = текущий->слева; std::cout влево = новыйузел; узелIsPlaced = правда; } } } }
Я пытаюсь вставить узел в дерево двоичного поиска. Кроме того, если при попытке вставки я столкнусь с дубликатом, я должен добавить один новый ListNode в список внутри этого узла дерева с номером строки, в которой был обнаружен новый повторяющийся элемент. (есть входной файл, который отлично работает)
Не уверен, но может быть проблема с копированием указателя?
Вот мой код со структурами узла и проблемной процедурой:
struct Node { Узел* родительский {nullptr}; Узел* слева {nullptr}; Узел* справа {nullptr}; Данные Carplate*{}; ListNode* head {nullptr}; }; struct ListNode { std::uint32_t line_number{}; ListNode* next{nullptr}; ListNode(std::uint32_t номер, ListNode* nextNode = nullptr): line_number{номер}, следующий{следующийузел} {} }; void push(ListNode* head, std::uint32_t line_number) { while (head->next != nullptr) голова = голова-> следующий; head->next = новый ListNode(line_number); возвращаться; } нужно исправить (ниже):
void Insert(Node* &root, const std::string& text, std::uint32_t line_number) { Узел * newNode {новый узел {} }; newNode->data = getCarplate(text); newNode->head = новый ListNode(line_number); если (!корень) { корень = новыйузел; возвращаться; } bool nodeIsPlaced {ложь}; Узел* текущий {корень}; while (nodeIsPlaced == false) { if (текущий->данные == newNode->данные) { std::cout head, line_number); узелIsPlaced = правда; } иначе, если (newNode->данные > текущие->данные) { if (текущий->right != nullptr) { текущий = текущий-> вправо; std::cout вправо = новый узел; узелIsPlaced = правда; } } иначе, если (newNode->данные данные) { if (текущий->left != nullptr) { текущий = текущий->слева; std::cout влево = новыйузел; узелIsPlaced = правда; } } } }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Библиотека двоичного дерева поиска для тестирования лит-кода в моей собственной IDE
Anonymous » » в форуме Python - 0 Ответы
- 86 Просмотры
-
Последнее сообщение Anonymous
-