код ниже используется для поиска в дереве двоичного поиска на фотографии и удаления узла из дерева, и я использую рекурсивный метод для поиска в этом BSTree.Приведенный ниже код заставит temp перейти к узлу с данными 7, если я отправлю данные 7 в функцию.Мне нужна помощь, чтобы сделать tempnull как хвост для temp, так что, например, вы видите на фотографии, когда temp на 7, tempnull на 10, так что tempnull всегда будет на 1 шаг позади temp.но мне нужно сделать это, не цепляясь за свою пустую функцию и не повторяя мой рекурсивный метод для temp, но я могу использовать любой метод, чтобы сделать tempnull folow temp на 1 шаг позади.
OBS!Первый метод в приведенном ниже коде не закончен на 100%, но я просто хотел показать вам, как я думаю.но метод рекурсивного поиска работает хорошо.
![enter image description here](https://i.stack.imgur.com/3tIlt.jpg)
struct treeNode
{
int data;
struct treeNode* left;
struct treeNode* right;
};
typedef struct treeNode* BSTree;
void removeElement(BSTree* tree, int data)
{
BSTree temp = *tree;
BSTree tempnull = *tree;
if (isEmpty(*tree))
{
return ;
}
else if (data < temp->data)
{
removeElement(&(temp->left), data);
}
else if (data > temp->data)
{
removeElement(&(temp->right), data);
}
else
{
if (temp->left == NULL && temp->right == NULL)
{
if (temp->data < tempnull->data)
{
free(temp);
tempnull->left = NULL;
}
else if (temp->data > tempnull->data)
{
free(temp);
tempnull->right = NULL;
}
}
else if (temp->left == NULL)
{
tempnull = temp->right;
free(temp);
}
else if (temp->right == NULL)
{
tempnull = temp->left;
free(temp);
}
else
{
temp = FindMin(temp->right);
tempnull->data = temp->data;
removeElement(&temp, temp->data);
}
}
}
BSTree FindMin(BSTree tree)
{
while (tree->left != NULL)
{
tree = tree->left;
}
return tree;
}