Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- //korak1
- typedef struct node_st{
- char oznaka[3];
- char bioskop[11];
- char film[9];
- char zanr[10];
- double cena;
- struct node_st * left;
- struct node_st * right;
- }node;
- void insert(node ** root,char oznaka[], char bioskop[],
- char film[], char zanr[],double cena ){
- if(*root == NULL){
- node * tmp = (node*) malloc(sizeof(node));
- strcpy(tmp->oznaka,oznaka);
- strcpy(tmp->bioskop,bioskop);
- strcpy(tmp->film,film);
- strcpy(tmp->zanr,zanr);
- tmp->cena = cena;
- tmp->left= NULL;
- tmp->right= NULL;
- *root = tmp;
- return;
- }
- if(cena < (*root)->cena){
- insert(&(*root)->left,oznaka,bioskop,film,zanr,cena);
- }else{
- insert(&(*root)->right,oznaka,bioskop,film,zanr,cena);
- }
- }
- void printTree(node * root){
- if(root == NULL){
- return;
- }
- printTree(root->left);
- printf("%s %s %s %s %lf\n",
- root->oznaka,root->bioskop,root->film,root->zanr,root->cena);
- printTree(root->right);
- }
- void ucitajIzFajla(char nazivFajla[], node ** root){
- FILE *f = fopen(nazivFajla,"r");
- if(f == NULL){
- printf("Greska prilikom otvaranja ulaznog fajla!\n");
- exit(1);
- }
- char oznaka[3];
- char bioskop[11];
- char film[9];
- char zanr[10];
- double cena;
- while(fscanf(f, "%s %s %s %s %lf",oznaka,bioskop,film,zanr,&cena) != EOF){
- insert(root,oznaka,bioskop,film,zanr,cena);
- }
- }
- void deleteTree(node ** root){
- if(*root == NULL){
- return;
- }
- deleteTree(&(*root)->left);
- deleteTree(&(*root)->right);
- free(*root);
- *root = NULL;
- }
- node* minZaGrad(node * root, char oznaka[]){
- if(root == NULL){
- return NULL;
- }
- node* best = NULL;
- //ukoliko je trenutni koren odgovarajuceg kriterijuma -> postaje kandidat za najmanju cenu
- if(strcmp(root->oznaka,oznaka) == 0){
- best = root;
- }
- //trazimo najbolji iz levog podstabla, i ukoliko je on bolji od trenutnog najboljeg ili je trenutni najbolji NULL, postavljamo trenutni najbolji na najbolji iz levog
- node * leftBest = minZaGrad(root->left, oznaka);
- if(leftBest != NULL){
- if(best == NULL || leftBest->cena < best->cena){
- best = leftBest;
- }
- }
- node *rightBest = minZaGrad(root->right,oznaka);
- if(rightBest != NULL){
- if(best == NULL || rightBest->cena < best->cena){
- best = rightBest;
- }
- }
- return best;
- }
- void main(){
- node* root = NULL;
- ucitajIzFajla("ulaz.txt",&root);
- printTree(root);
- node * najbolji = minZaGrad(root,"NS");
- if(najbolji != NULL)
- printf("Najbolji u NS: %s %s %s %s %lf\n",
- najbolji->oznaka,najbolji->bioskop,najbolji->film,najbolji->zanr,najbolji->cena);
- else
- printf("Ne postoji takav\n");
- deleteTree(&root);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement