Функция разделения в двоичном дереве поиска класса C ++ - PullRequest
0 голосов
/ 13 марта 2020

В настоящее время я работаю над заданием для класса Comp Sci, которое требует от меня реализации множества различных функций с бинарными деревьями поиска. Текущая функция, в которой у меня возникают проблемы с обертыванием моей головы, проходит через дерево и рекурсивно разбивает его на указатель на два отдельных дерева. Я, как правило, просто запутался в том, как сделать это с указателями на указатели на объекты Node (именно так он настроил функцию, когда дал нам назначение)

void split(Node *T, int k, Node **L, Node **R)
{
    if(T == nullptr){

    }
    else{
        if(T->key <= k){
            Node *RightL;
            Node *RightR;
            Node *temp = T;
            split(T->right,k,&RightL,&RightR);
            temp->right = nullptr;
            temp->right = RightL;
            R = &RightR;
            L = &temp;
        }
        else{
            Node *LeftL;
            Node *LeftR;
            Node *temp = T;
            split(T->left,k,&LeftL,&LeftR);
            temp->left = nullptr;
            temp->left = LeftR;
            R = &temp;
            L = &LeftL;
        }
    }
}

Что касается логики c из этого он описал, что если ключ / значение текущего узла дерева меньше значения, указанного при вызове функции, он должен взять текущий узел вместе со всем содержимым его левого дерева и поместить его в левое дерево, а затем принять полученную левую сторону после разбиения правой ветви и установите ее на недостающую правую ветвь левого дерева. Правая ветвь разделенной правой ветки затем присваивается правому дереву.

Как мне переписать то, что мне нужно, чтобы оно работало?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...