Красное черное дерево ноль указатель v ноль лист - PullRequest
0 голосов
/ 31 мая 2018

Недавно я работал над красным черным деревом в 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;
}

Функции удаления и исправления удаления практически идентичны стандартному псевдокоду удаления красного черного дерева, но если я также должен опубликовать это, пожалуйста, предупредите меня,Спасибо!

...