最近,我一直在研究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;
}
删除和删除修复功能几乎与标准的红黑树删除伪代码相同,但如果我也应该发布,请提醒我。谢谢!