У меня есть метод рекурсивной вставки, который реализуется в красно-черном дереве. После возвращения из рекурсивного вызова я пытаюсь увидеть, является ли дочерний элемент локального корня красным. Но на самом деле я проверяю корень дерева, а не поддерево (где произошла самая последняя вставка).
Вот фрагмент кода, который я смотрю и который находится внутри метода insertNode:
this->insertNode(root->right, value);
if(root->right->is_red) {
cout << "color again & " << root->data << endl;
root->right->is_red = false;
root->is_red = true;
this->rotateLeft(root);
}
Как я могу работать с корнем поддерева, где произошла последняя вставка? Нужно ли мне убедиться, что это сделано, прежде чем я вернусь с рекурсивного вызова?
Измените insertNode так, чтобы он возвращал фактический вставленный узел. Вы сможете легко добраться до своего родителя после вставки (при условии, что этот узел знает своего родителя).
Других решений пока нет …