Получение значения мусора после удаления узла из двоичного дерева поиска, у которого есть два дочерних элемента - PullRequest
0 голосов
/ 21 апреля 2020
#include <stdio.h>
#include <stdlib.h>

struct Node {
    int data;
    struct Node *left, *right;
};

struct Node* root = NULL;

//find min element address in bst for right end.
struct Node* FindMin(struct Node* root){
    if(root == NULL) return NULL;
    struct Node* temp = root;
    struct Node* temp1;
    int data = root->data;
    while(temp != NULL){
        if(data < temp->data){
            data = temp->data;
            temp1 = temp;
        }
        temp = temp->right;
    }
    return temp1;
}

//deleting an element from binary search tree
struct Node* Delete(int data, struct Node* root){
    if(root == NULL) return root;
    else if(data < root->data) 
        root->left = Delete(data, root->left);
    else if(data > root->data)
        root->right = Delete(data, root->right);
    else {
        //case 1 : no child
        if(root->right == NULL && root->left == NULL){
            free(root);
            root = NULL;
        }
        //case 2 : one child 
        else if(root->left == NULL){
            struct Node* temp = root;
            root = root->right;
            free(temp);
        }
        else if(root->right == NULL){
            struct Node* temp = root;
            root = root->left;
            free(temp);
        }
        //case 3 : 2 childs
        else {
            struct Node* temp = FindMin(root->right);
            root->data = temp->data;
            root->right = Delete(temp->data, root->right);
        }
        return root;
    }    
}

Всякий раз, когда я пытаюсь удалить узел с двумя дочерними элементами, он работает нормально, но при печати вместо этого узла я получаю значение мусора. Это работает нормально для случая 1: нет ребенка, а также для случая 2: один ребенок. не могли бы вы предложить какие-то решения?

...