У меня есть структура, называемая TreeNode с ключом int, а слева и с родителем. Я пытаюсь удалить узел из дерева с помощью функции DeleteNode, и он не работает. Я должен заменить удаленный узел в моей функции DeleteNode с максимальным значением из левого поддерева. Мои функции трансплантации и макс - вспомогательные функции для DeleteNode. Моя проблема в том, что я не уверен, где в моей функции DeleteNode я должен сравнивать значение узла, на котором я нахожусь, значение, которое я передаю через функцию. У меня есть комментарий в моем коде со звездочками, где я смущен, что делать. Любая помощь будет принята с благодарностью!Функция для удаления узла с заданным значением из двоичного дерева поиска
void transplant(TreeNode* u, TreeNode* v) //swaps u with v
{
if (u->parent == NULL) //if u was root, make v new root
u->parent = v;
else if (u == u->parent->left) //if u is smaller than it's parent
u->parent->left = v; //set v to the left child of parent of u. Swap them at left, really
else
u->parent->right = v; //otherwise swap them at right
if (v != NULL) //reassign parents to double link
v->parent = u->parent;
}
TreeNode* maximum(TreeNode* n)
{
while (n->left != NULL)
n = n->left;
return n;
}
void deleteNode(TreeNode *node, int key)
{
if (node->left == NULL) //if there is no left child
transplant(node, node->right); //swap
else if (node->right == NULL) //if there is no right child
transplant(node, node->left); //swap
else
{
if(node->key == key){ //****This if comparison must be wrong***
TreeNode* temp = maximum(node->right); //make temp the max on right
if (temp->parent != node) //if it is more than one chain down
{
transplant(temp, temp->right); //swap temp and it's right branch
temp->right = node->right; //set right branch to nodes right
temp->parent->right = temp; //set temp to the right child
}
transplant(node, temp); // transplant
temp->left = node->left; //get nodes left branch
temp->left->parent = temp; //replace
}
}
}
Вы уже проверили свой код, пройдя по строкам с помощью отладчика? –