В настоящее время я работаю над заданием для класса 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 из этого он описал, что если ключ / значение текущего узла дерева меньше значения, указанного при вызове функции, он должен взять текущий узел вместе со всем содержимым его левого дерева и поместить его в левое дерево, а затем принять полученную левую сторону после разбиения правой ветви и установите ее на недостающую правую ветвь левого дерева. Правая ветвь разделенной правой ветки затем присваивается правому дереву.
Как мне переписать то, что мне нужно, чтобы оно работало?