红色黑树空指针v零叶子

时间:2018-05-31 19:05:31

标签: c++ red-black-tree

最近,我一直在研究C ++中的红黑树,并且已经开发了一种功能性插入方法,但是当编码删除时,我遇到了一个问题。最初,我只是在创建了实际的黑色NIL叶子时,左边和右边保持值为NULL,而在实际的插入代码中,如果在查看节点时使用NULL或黑色则使用。但是,在删除过程中,我需要获取有可能是NULL值而不是NULL的节点的父节点,这最终会引发分段错误。这导致了一个问题,即在NIL值叶子上使用NULL指针时是否有任何方法可以实现删除和删除红黑树的修正,否则我将不得不重做整个插入。节点类的代码如下:

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;
}

删除和删除修复功能几乎与标准的红黑树删除伪代码相同,但如果我也应该发布,请提醒我。谢谢!

0 个答案:

没有答案