红黑树平衡功能的运行时错误

时间:2017-07-14 18:43:30

标签: c++ algorithm enums tree runtime-error

我在运行红黑树平衡功能时遇到运行时错误,我不确定原因。到目前为止,我已经尝试过调试它而没有运气。 这是功能:

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

谢谢!

0 个答案:

没有答案