Toto je trochu blbosť
Kód:
while(pom->vacsi != NULL || pom->mensi != NULL)
{
if(i==pom->hodnota)
break;
else if(i<pom->hodnota)
pom=pom->mensi;
else if(i>pom->hodnota)
pom=pom->vacsi;
p_hlbka++;
}
Čo sa stane:
Kód:
ak mám ľavý, alebo pravý podstrom, tak:
ak sa hodnota rovná, našiel som, OK
ak je i menšie, idem do ľavého podstromu (Ale čo ak nemám ľavý podstrom?)
ak je i väčšie, idem do pravého podstromu (Ale čo ak nemám práve pravý podstrom?)
Takže kým zadávaš jednu stranu, je všetko OK. Keď ale zadáš číslo z "inej strany", podmienka vo while cykle prejde (lebo máš ľavý, ALEBO pravý podstrom), no ten správny to nenájde a program spadne.
Takže to skús nejako takto:
Kód:
while(1)
{
if(i == pom->hodnota) //nasiel som, koncim tu
break;
if(i < pom->hodnota) //ak je hodnota mensia
{
if( pom->mensi ) //a existuje lavy podstrom
pom = pom->mensi; //idem do laveho podstromu
else
break; //inak koncim a pridam uzol
}
if(i > pom->hodnota) //ak je hodnota vacsia
{
if( pom->vacsi ) //a existuje pravy podstrom
pom = pom->vacsi; //idem do praveho podstromu
else
break; //inak koncim a pridam uzol
}
p_hlbka++;
}
PS:
Vážené dámy a páni, alebo keď už vážení, tak
vážení s mäkkým i