Недавно я работал над красным черным деревом в C ++ и уже разработал функциональный метод вставки, но при кодировании для удаления я столкнулся с проблемой.Первоначально, я просто держал левое и правое значение NULL при создании поверх фактических черных листов NIL и в реальном коде для вставки, который я использовал, если NULL или черный при просмотре узлов.Однако в процессе удаления мне нужно получить родительский узел для узлов, которые могут иметь значение NULL, а не NULL, что в конечном итоге приводит к ошибке сегментации.Это приводит к вопросу о том, существует ли какой-либо способ реализовать удаление и удаление исправления для красно-черного дерева при использовании указателей NULL поверх листьев значения NIL, так как в противном случае мне придется также переработать всю вставку.Код для класса узла выглядит следующим образом:
node :: node() { //constructor
left = NULL;
right = NULL;
parent = NULL;
color = 0;
data = 0;
}
node :: ~node() {//destructor
left = NULL;
right = NULL;
}
void node :: setLeft(node* newLeft) {//sets left
left = newLeft;
}
void node :: setRight(node* newRight) {//sets right
right = newRight;
}
void node :: setParent(node* newParent) {//sets parent
parent = newParent;
}
node* node :: getLeft() {//gets left
return left;
}
node* node :: getRight() {//gets right
return right;
}
node* node :: getParent() {//gets parent
return parent;
}
void node :: setData(int newdata) {//sets data
data = newdata;
}
int node :: getData() {//gets data
return data;
}
void node :: setCol(bool newcol) {//sets color
color = newcol;
}
bool node :: getCol() {//returns color
return color;
}
Функции удаления и исправления удаления практически идентичны стандартному псевдокоду удаления красного черного дерева, но если я также должен опубликовать это, пожалуйста, предупредите меня,Спасибо!