Pagini recente » Cod sursa (job #1480505) | Cod sursa (job #623057) | Cod sursa (job #2771804) | Cod sursa (job #2182659) | Cod sursa (job #2771963)
#include <stdio.h>
#include <malloc.h>
#define FIN "algsort.in"
#define FOUT "algsort.out"
struct Node {
int data;
struct Node *left, *right;
};
struct Node* insert(struct Node *root, int data) {
if(root == NULL) {
root = (struct Node*)malloc(sizeof(struct Node));
root->data = data;
root->left = NULL;
root->right = NULL;
} else if(root->data > data) {
root->left = insert(root->left, data);
} else {
root->right = insert(root->right, data);
}
return root;
};
struct Node *findMin(struct Node *root) {
while(root->left != NULL) {
root = root->left;
}
return root;
}
//method to vizit nodes in Inorder
void inorder(struct Node *root) {
if(root != NULL) {
inorder(root->left);
printf("%d ", root->data);
inorder(root->right);
}
};
struct Node* del(struct Node *root, int x) {
if(root == NULL) return root;
else if(root->data > x) root->left = del(root->left, x);
else if(root->data < x) root->right = del(root->right, x);
else {
//case 1: no child
if(root->left == NULL && root->right == 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: two children
} else if(root->left != NULL && root->right != NULL) {
struct Node *temp = findMin(root->right);
root->data = temp->data;
root->right = del(root->right, temp->data);
}
}
return root;
};
int main() {
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
struct Node *root = NULL;
int n, x;
scanf("%d", &n);
for(int i = 0; i < n; ++i)
scanf("%d", &x),
root = insert( root , x);
inorder( root );
return(0);
}