#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: один ребенок. не могли бы вы предложить какие-то решения?