提问人:swecpp 提问时间:10/29/2023 最后编辑:swecpp 更新时间:10/29/2023 访问量:72
检测二叉搜索树重复项并解决冲突
detecting binary search tree duplicates and solving collisions
问:
我正在尝试在二叉搜索树中插入一个节点。此外,如果在尝试插入时遇到重复项,则必须将一个新的 ListNode 添加到此树节点内的列表中,其中包含在输入文件中遇到新重复元素的行号。
问题在于,在添加新的树节点时,程序只是将重复的元素添加到树中,而不处理冲突。 我不确定,但也许指针复制有问题?
有我的代码,其中包含节点的结构和问题过程:
struct Node {
Node* parent{ nullptr };
Node* left{ nullptr };
Node* right{ nullptr };
Carplate* data{};
ListNode* head{ nullptr };
};
struct ListNode {
std::uint32_t line_number{};
ListNode* next{ nullptr };
ListNode(std::uint32_t number, ListNode* nextNode = nullptr) :
line_number{ number }, next{ nextNode }
{}
};
void
push(ListNode* head, std::uint32_t line_number) {
while (head->next != nullptr)
head = head->next;
head->next = new ListNode(line_number);
return;
}
需要修复(如下):
void
insert(Node* &root, const std::string& text, std::uint32_t line_number) {
Node* newNode{ new Node{} };
newNode->data = getCarplate(text);
newNode->head = new ListNode(line_number);
if (!root) {
root = newNode;
return;
}
bool nodeIsPlaced{ false };
Node* current{ root };
while (nodeIsPlaced == false) {
if (current->data == newNode->data) {
std::cout << "update list\n";
delete(newNode);
push(current->head, line_number);
nodeIsPlaced = true;
}
else if (newNode->data > current->data) {
if (current->right != nullptr) {
current = current->right;
std::cout << "step right\n";
}
else {
current->right = newNode;
nodeIsPlaced = true;
}
}
else if (newNode->data < current->data) {
if (current->left != nullptr) {
current = current->left;
std::cout << "step left\n";
}
else {
current->left = newNode;
nodeIsPlaced = true;
}
}
}
}
答: 暂无答案
评论
current->data == newNode->data
您正在比较指针,而不是它们所指向的对象的内容。