Wiem jedynie tyle że drzewo na strukturę:
Kod: Zaznacz cały
struct drzewo {
struct drzewo *lewy_syn;
struct drzewo *prawy_syn;
char *dane;
};
Kod: Zaznacz cały
struct drzewo {
struct drzewo *lewy_syn;
struct drzewo *prawy_syn;
char *dane;
};
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
struct drzewo{
struct drzewo *lewy_syn;
struct drzewo *prawy_syn;
char *dane;
};
int main(int argv, char *args[]) {
struct drzewo *korzen;
korzen = (struct drzewo*)malloc(sizeof(struct drzewo));
korzen->prawy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
korzen->lewy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
korzen->dane = "korzen";
korzen->prawy_syn->dane = "prawy syn";
korzen->lewy_syn->dane = "lewy syn";
printf("%s
",korzen->dane);
printf("%s
",korzen->prawy_syn->dane);
printf("%s
",korzen->lewy_syn->dane);
free(korzen->prawy_syn);
free(korzen->lewy_syn);
free(korzen);
return 0;
}
Kod: Zaznacz cały
malloc(sizeof(char)*20);
Niepotrzebnie w takim razie marnujesz pamięćktosja pisze:gdzie w lisciach będą kolejne znaki z tablicy
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
struct drzewo{
struct drzewo *rodzic;
struct drzewo *lewy_syn;
struct drzewo *prawy_syn;
char dane;
};
void wypisz(struct drzewo * n, char c[], int p){
int i;
if(!(n->lewy_syn))
{
printf("%s:", n->dane);
for(i = 0; i < p; i++) printf("%s",c[i]);
printf("\n");
}
else
{
c[p] = '0'; wypisz(n->lewy_syn,c,p + 1);
c[p] = '1'; wypisz(n->prawy_syn,c,p + 1);
}
}
int main(int argv, char *args[]) {
struct drzewo * n;
struct drzewo * x;
struct drzewo * r;
int i;
char c[16]; // tablica przechowująca kody ścieżek
n = (struct drzewo*)malloc(sizeof(struct drzewo));
n->prawy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
n->lewy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
n->rodzic = n->lewy_syn = n->prawy_syn = NULL;
n->dane = 'A';
//10 nastepnych wezłow
for(i = 1; i < 10; i++)
{
x= (struct drzewo*)malloc(sizeof(struct drzewo));
x->prawy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
x->lewy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
x->lewy_syn = x->prawy_syn = NULL;
x->dane = 'A'+i;
// tworzymy nowy korzeń
r = (struct drzewo*)malloc(sizeof(struct drzewo));
r->prawy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
r->lewy_syn = (struct drzewo*)malloc(sizeof(struct drzewo));
r->rodzic = NULL;
// do korzenia dołączamy węzły n i x
n->rodzic = x->rodzic = r;
r->lewy_syn = x; r->prawy_syn = n;
// n staje się nowym korzeniem drzewa
n = r;
};
wypisz(n,c,0);
getch();
return 0;
}
Kod: Zaznacz cały
printf("%s:", n->dane);
Kod: Zaznacz cały
printf("%c:", n->dane);
Odnośnie jeszcze zapisu w stylu:==2932== HEAP SUMMARY:
==2932== in use at exit: 1,824 bytes in 57 blocks
==2932== total heap usage: 57 allocs, 0 frees, 1,824 bytes allocated
==2932== LEAK SUMMARY:
==2932== definitely lost: 1,248 bytes in 39 blocks
==2932== indirectly lost: 576 bytes in 18 blocks
Kod: Zaznacz cały
r = (struct drzewo*)malloc(sizeof(struct drzewo));
Kod: Zaznacz cały
while((w=getc(f))!=EOF){
kodowanie(n,t,0,w);
}
Kod: Zaznacz cały
void kodowanie(struct drzewo *n, char t[], int lenc, char w){
int i;
if(!(n->left))
{
if(n->ch == w){
for(i = 0; i < lenc; i++){
printf("%d", t[i]);
}
}
}
else
{
t[lenc] = 0; kodowanie(n->left,t,lenc + 1,w);
t[lenc] = 1; kodowanie(n->right,t,lenc + 1,w);
}
}
Kod: Zaznacz cały
while((bufor=getc(f))!= EOF){
i=7;
if(!(n->left)){
if(bufor & (1 << i)){
n=n->right;
i--;
}
else{
n= n->left;
i--
}
}
else{
printf("%c", n->ch);
}
}