удалить элемент из дерева - PullRequest
0 голосов
/ 07 декабря 2018

код ниже используется для поиска в дереве двоичного поиска на фотографии и удаления узла из дерева, и я использую рекурсивный метод для поиска в этом BSTree.Приведенный ниже код заставит temp перейти к узлу с данными 7, если я отправлю данные 7 в функцию.Мне нужна помощь, чтобы сделать tempnull как хвост для temp, так что, например, вы видите на фотографии, когда temp на 7, tempnull на 10, так что tempnull всегда будет на 1 шаг позади temp.но мне нужно сделать это, не цепляясь за свою пустую функцию и не повторяя мой рекурсивный метод для temp, но я могу использовать любой метод, чтобы сделать tempnull folow temp на 1 шаг позади.

OBS!Первый метод в приведенном ниже коде не закончен на 100%, но я просто хотел показать вам, как я думаю.но метод рекурсивного поиска работает хорошо.

enter image description here

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;
}
...