Как добавить одиннаковые элементы в Авл-дерево, чтобы они хранились в одной вершине?

В Авл дерево добавляются элементы из массива структур. Добавление идёт только по 1 характеристике структуры. Нужно сделать так, чтобы одиннаковые элементы хранились в одной вершине ,и поворот выполнялся корректно.

bool rise;
struct vertex {
    int i;
    record data;
    int balance;
    vertex *left;
    vertex *right;
};

void LL1(vertex *(&p)) {
    vertex *q;
    q = p->left;
    if (q->balance == 0) {
        q->balance = 1;
        p->balance = -1;
    }
    else {
        q->balance = 0;
        p->balance = 0;
    }
    p->left = q->right;
    q->right = p;
    p = q;

}

void RR1(vertex *(&p)) {
    vertex *q;
    q = p->right;
    if (q->balance == 0) {
        q->balance = 1;
        p->balance = -1;
    }
    else {
        q->balance = 0;
        p->balance = 0;
    }
    p->right = q->left;
    q->left = p;
    p = q;
}

void LR(vertex *(&p)) {
    vertex *q = new vertex;
    vertex *r = new vertex;
    q = p->left;
    r = q->right;
    if (r == NULL) return;
    if (r->balance < 0)p->balance = 1;
    else p->balance = 0;

    if (r->balance > 0)q->balance = -1;
    else q->balance = 0;

    r->balance = 0;
    p->left = r->right;
    q->right = r->left;
    r->left = q;
    r->right = p;
    p = r;
}

void RL(vertex *(&p)) {
    vertex *q = new vertex;
    vertex *r = new vertex;
    q = p->right;
    r = q->left;
    if (r == NULL)return;
    if (r->balance > 0)p->balance = -1;
    else p->balance = 0;

    if (r->balance < 0)q->balance = 1;
    else q->balance = 0;

    r->balance = 0;
    p->right = r->left;
    q->left = r->right;
    r->left = p;
    r->right = q;
    p = r;
}
void add_AVL(vertex *(&p), record x,int index) {
    if (p == NULL) {
        p = new vertex;
        p->data = x;
        p->i = index;
        p->left = NULL;
        p->right = NULL;
        p->balance = 0;
        rise = true;
    }else if (strcmp(p->data.keyTree().c_str(), x.keyTree().c_str())  < 0) {
        add_AVL(p->left, x,index);
        if (rise) {
            if (p->balance > 0) {
                p->balance = 0;
                rise = false;
            }
            else if (p->balance == 0) {
                p->balance = -1; rise = true;
            }
            else if (p->left->balance < 0) {
                LL1(p);
                rise = false;
            }
            else {
                LR(p);
                rise = false;
            }
        }
    }else if (strcmp(p->data.keyTree().c_str(), x.keyTree().c_str())  >0){ 
        add_AVL(p->right, x,index);
        if (rise) {
            if (p->balance < 0) { p->balance = 0; rise = false; }
            else if (p->balance == 0) { p->balance = 1; rise = true; }
            else if (p->right->balance > 0) {
                RR1(p);
                rise = 0;
            }
            else {
                RL(p);
                rise = false;
            }
        }
    }
    else if (strcmp(p->data.keyTree().c_str(), x.keyTree().c_str())  ==0){    
    //Не знаю как реализовать этот кусок
    }
}

Ответы (0 шт):