//dżewo binarne (float, string) #include "stdafx.h" #include #include #include struct dzewo { double dane; char *slowo; struct dzewo *lewslowo, *prawslowo; }; struct dzewo *Nowe_dzewo(double _dane, char* slowo_str) { struct dzewo * nowe = (struct dzewo*)malloc(sizeof(struct dzewo)); nowe->dane = _dane; nowe->slowo = NULL; nowe->slowo = (char*)malloc (sizeof(char)*(strlen (slowo_str)) ); strcpy(nowe->slowo, slowo_str); nowe->lewslowo = nowe->prawslowo = 0; return nowe; } void Wstaw_dz(struct dzewo *rut, double _dane, char* slowo_str) { for(;;) { if (_danedane) { if (rut->lewslowo == 0) { rut->lewslowo = Nowe_dzewo(_dane, slowo_str); return; } else rut = rut->lewslowo; } else{ if(rut->prawslowo==0) { rut->prawslowo = Nowe_dzewo(_dane, slowo_str); return; } else rut = rut->prawslowo; } } } int l = 0, p = 0; void Wyswietl(struct dzewo * rut) { printf("%.2lf | %s\n", rut->dane, rut->slowo); if (rut->lewslowo != NULL) { ++l; printf("l: %d/", l); Wyswietl(rut->lewslowo); } if (rut->prawslowo != NULL) { ++p; printf("p: %d\\", p); Wyswietl(rut->prawslowo); } } bool Wyszukaj(dzewo* rut, float _dane) { if (rut == NULL) return false; else if (rut->dane == _dane) return true; else if (rut->dane < _dane) return Wyszukaj(rut->prawslowo, _dane); else return Wyszukaj(rut->lewslowo, _dane); } void Zwalnianie(dzewo *rut) { if (rut->lewslowo != NULL) Zwalnianie(rut->lewslowo); if (rut->prawslowo != NULL) Zwalnianie(rut->prawslowo); delete rut; } int main() { double do_szukania = 9.99; double liczba; char slowo[10]; FILE *no_plik; if ((no_plik = fopen("plik.txt", "r")) != NULL) { fscanf(no_plik, "%lf", &liczba); fscanf(no_plik, "%s", &slowo); dzewo *ent = Nowe_dzewo(liczba, slowo); while (!feof(no_plik)) { fscanf(no_plik, "%lf", &liczba); fscanf(no_plik, "%s", &slowo); Wstaw_dz(ent, liczba, slowo); } printf("Leci drzewo!\n"); Wyswietl(ent); printf("\n%d", Wyszukaj(ent, 9.99)); printf("\n%d", Wyszukaj(ent, 2.50000000)); Zwalnianie(ent); } else printf("Chuju pliku nie ma\n"); getch(); return 0; }