Binárny strom

Morseova abeceda


Program Spustiteľná verzia

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

typedef struct vrchol {
	char znak;
	struct vrchol *bodka, *ciarka;
} TVrchol;

/* globálna premenná */
FILE *fr;

-----------------------------------------------------------------------------------------
TVrchol *vytvor(char z, TVrchol *b, TVrchol *c)
{
	TVrchol *novy = (TVrchol*)malloc(sizeof(TVrchol));

	novy->znak = z;
	novy->bodka = b;
	novy->ciarka = c;
	return (novy);
}
-----------------------------------------------------------------------------------------
void dekoduj(TVrchol *strom)
{
	TVrchol *p;
	char c;

	p = strom;

	while ((c = getc(fr)) != EOF) {
		if (c == '.') p = p->bodka;
		else if (c == '-') p = p->ciarka;
			else {
				putchar(p->znak);
				p = strom;
			}
	}
}
-----------------------------------------------------------------------------------------
void vypis(TVrchol *v) /* LKP – výpis prvkov stromu */
{
	if (v != NULL) {
		vypis(v->bodka);
		printf("%c ", v->znak);
		vypis(v->ciarka);
	}
}
-----------------------------------------------------------------------------------------
void main() /* hlavný program */
{
	TVrchol *strom = NULL;

	/* vytvorenie dekódovacieho stromu */
	strom = vytvor(' ',
		vytvor('e',
			vytvor('i',
				vytvor('s', vytvor('h', NULL, NULL), vytvor('v', NULL, NULL)),
				vytvor('u', vytvor('f', NULL, NULL), NULL)),
			vytvor('a',
				vytvor('r', vytvor('l', NULL, NULL), NULL),
				vytvor('w', vytvor('p', NULL, NULL), vytvor('j', NULL, NULL)))),
		vytvor('t',
			vytvor('n',
				vytvor('d', vytvor('b', NULL, NULL), vytvor('x', NULL, NULL)),
				vytvor('k', vytvor('c', NULL, NULL), vytvor('y', NULL, NULL))),
			vytvor('m',
				vytvor('g', vytvor('z', NULL, NULL), vytvor('q', NULL, NULL)),
				vytvor('o', NULL, NULL))));

	clrscr();

	fr = fopen("sprava.txt", "rt");

	printf("Sprava: ");
	dekoduj(strom);

	fclose(fr);
}