
struct binaris{					
	int szamozas;				
	int tartalom;				
	struct binaris *szulo;			
	struct binaris *bal;			
	struct binaris *jobb;			
};
	

struct listaelem{
	int sorszam;				
	struct binaris *elem;			
	struct listaelem *kov;			
};

/*strazsaelem letrehozasa*/
struct listaelem *elso, *utolso;

	elso= (struct listaelem *)malloc(sizeof(struct listaelem));
	if(!elso)
	{
		printf("\Kevés a memória!\n");
		return -1;
	}
	elso->elem=NULL;

	/*a binaris fa gyokerenek hozzafuzese*/

	utolso= (struct listaelem *)malloc(sizeof(struct listaelem));
	if(!utolso)
	{
		printf("\Kevés a memória!\n");
		return -1;
	}
	utolso->kov=elso;
	utolso->elem=gyoker;
	utolso->sorszam=1;
	elso->kov=utolso;


int kiosztott=1;	/*legnagyobb kiosztott sorszam*/
struct binaris* seged;
struct listaelem *aktualis;


int szelessegi_bejaras(struct binaris *m)
{
	aktualis = elso->kov;						/*kivesszük a sorból az első elemet, mert ennek a gyerekeit most jarjuk be*/
	elso->kov = aktualis->kov;		
	if (elso == elso->kov) utolso=elso;				/*ha kiürül a láncolt lista, és csak a strázsaelem marad az elején*/
	free(aktualis);							/*felszabadítás*/

	if (m->bal) 							/*megnézzük. hogy van-e bal gyereke*/
	{
		seged=m->bal;
		if (seged->szamozas == 0)				/*megnezzuk, hogy a bal gyereket meglátogattuk-e már*/
		{
			seged->szamozas = ++kiosztott;			/*ha nem akkor megtesszük*/
									/*beszúrjuk a bejárandó elemek listájába*/
			aktualis= (struct listaelem *)malloc(sizeof(struct listaelem));		/*helyfoglals az új elemnek*/
			if(!aktualis)
			{
				printf("\Kevés a memória!\n");
				return -1;
			}
			aktualis->sorszam = seged->szamozas;		/*az új elem értékeinak a beállítása*/
			aktualis->elem = seged;
			aktualis->kov = elso;
			utolso->kov = aktualis; utolso = aktualis;	/*mutatók állítása*/
		}
	}
	if (m->jobb) 							/*megnézzük. hogy van-e jobb gyereke*/
	{
		seged=m->jobb;						/*megnezzuk, hogy a jobb gyereket meglátogattuk-e már*/
		if (seged->szamozas == 0)
		{
			seged->szamozas = ++kiosztott;			/*ha nem akkor megtesszük*/
			aktualis= (struct listaelem *)malloc(sizeof(struct listaelem));		/*helyfoglals az új elemnek*/
			if(!aktualis)					
			{
				printf("\Kevés a memória!\n");
				return -1;
			}
			aktualis->sorszam = seged->szamozas;		/*az új elem értékeinak a beállítása*/
			aktualis->elem = seged;
			aktualis->kov = elso;
			utolso->kov = aktualis; utolso = aktualis;	/*mutatók állítása*/	
		}
	}

	if (elso==elso->kov)							/*már mindenhol jártunk*/
	{

		return 0;						/*ezért vége van*/
	}
	else 
	{
		aktualis = elso->kov;					/*a következő bejárandó csomópont*/
		szelessegi_bejaras(aktualis->elem);			/*még nem jártunk mindenhol, ezért megyünk tovább*/
	}

return 0;
} 
