我在运行红黑树平衡功能时遇到运行时错误,我不确定原因。到目前为止,我已经尝试过调试它而没有运气。 这是功能:
void rbbalance(Tree* t, TreeNode* n){ //n is x
while (n != t->root && n->color == BLACK){
if (n == n->parent->left){
TreeNode* s = n->parent->right;
if (s->color == RED){
s->color = BLACK;
n->parent->color = RED;
rotate_left(t, n->parent);
s = n->parent->right;
}
if (s->left->color == BLACK && s->right->color == BLACK){
s->color = RED;
n = n->parent;
}
else{
if (n->right->color == BLACK){
s->left->color = BLACK;
s->color = RED;
rotate_left(t, s);
s = n->parent->right;
}
s->color = n->parent->color;
n->parent->color = BLACK;
rotate_left(t, n->parent);
n = t->root;
}
}
else{
TreeNode* s = n->parent->left;
if (s->color == RED){
s->color == BLACK;
n->parent->color = RED;
rotate_right(t, n->parent);
s = n->parent->left;
}
if (s->left->color == BLACK && s->right->color == BLACK){
s->color = RED;
n = n->parent;
}
else{
if (s->left->color == BLACK){
s->right->color = BLACK;
s->color = RED;
rotate_left(t, s);
s = n->parent->left;
}
s->color = n->parent->color;
n->parent->color = BLACK;
s->left->color = BLACK;
rotate_right(t, n->parent);
n = t->root;
}
}
}
n->color = BLACK;
以下是给我的其他信息: 结构定义如下:
enum color { RED, BLACK };
struct TreeNode
{
int key;
enum color color;
TreeNode *left;
TreeNode *right;
TreeNode *parent;
};
struct Tree
{
TreeNode *root;
};
您可以使用几个辅助函数来实现该程序。
TreeNode* sibling(TreeNode* n) //return the sicilian node
void rotate_right(Tree* t, TreeNode *n) //right rotate
void rotate_left(Tree* t, TreeNode *n) // left rotate
color node_color(TreeNode* n) //returns the color of the node
谢谢!