Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 02.05.14
Prihlásený: 18.05.15
Príspevky: 15
Témy: 8
Príspevok NapísalOffline : 28.10.2014 17:40

Zadanie:
Kód:
Uvažujte binárny vyhľadávací strom. Na vstupe je daných niekoľko čísel, ktoré postupne vkladáte do tohto stromu. Pre každé číslo zistite, ako hlboko je v strome uložené. Ak sa číslo v strome nenachádza, tak ho najprv pridajte do stromu.

Špecifikácia vstupu: Na vstupe je niekoľko čísel, ktoré postupne vkladáte do stromu. Čísla sú oddelené medzerou alebo novým riadkom.

Špecifikácia výstupu: Pre každé číslo na vstupe vypíšte jedno číslo -- ako hlboko je dané číslo uložené v strome.


Ukážka vstupu:
Kód:
5
3
2
1
3


Výstup pre ukážkový vstup:
Kód:
0
1
2
3
1


Dobrý deň,
Vážený dámy a páni, rád by som Vás oslovil ohladne jedného problému s týmto programom. Funguje takmer všetko, ale je tam taký problém,že strom ide iba do jednej strany, ktorá závisí od vstupu, podla toho ci dam vacsie cislo ako to prve alebo to mensie a takto to ide aj s ostatnými číslami v strome.


Kód:
#include <stdio.h>
#include<stdlib.h>

typedef struct strom{
   int hodnota;
     int hlbka;
   struct strom *vacsi;
     struct strom *mensi;
}strom;

int main()
{
  int i,p_hlbka=1;
  strom *prvy, *pom;
 
  prvy = (strom*)malloc(sizeof(strom));
  pom = prvy;
  prvy->hlbka=0;
  prvy->vacsi=NULL;
  prvy->mensi=NULL;
 
  scanf("%d",&prvy->hodnota);
 
 
  printf("%d\n",prvy->hlbka);
 
  while((scanf("%d",&i)) == 1)
  {
    p_hlbka = 1;
    pom=prvy;
    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++;
    }
   
    if(i<pom->hodnota)
    {
      pom->mensi = (strom*)malloc(sizeof(strom));
      pom = pom->mensi;
      pom->hodnota = i;
      pom->hlbka = p_hlbka;
      pom->vacsi = NULL;
      pom->mensi = NULL;
    }
    if(i>pom->hodnota)
    {
      pom->vacsi = (strom*)malloc(sizeof(strom));
      pom = pom->vacsi;
      pom->hodnota = i;
      pom->hlbka = p_hlbka;
      pom->vacsi = NULL;
      pom->mensi = NULL;
    }
   
    printf("%d\n",pom->hlbka);
  }
 
  return 0;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3
Príspevok NapísalOffline : 28.10.2014 18:18

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 ;)







_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Odpovedať na tému [ Príspevkov: 2 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. binarny strom

v Assembler, C, C++, Pascal, Java

4

2091

25.02.2009 21:18

stewe Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Strom z cesty

v PHP, ASP

1

309

05.02.2014 17:49

killer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Slovnik pre lexikograficky strom.

v Assembler, C, C++, Pascal, Java

0

875

06.04.2008 10:25

danciwo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhladavaci skript

v PHP, ASP

15

1152

22.10.2008 22:14

Blackshadow Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vyhľadavací robot

v PHP, ASP

8

636

21.10.2007 22:05

Bananslovak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Čo je to za strom? Na konároch má akoby klince...

v Voľný čas a hobby

1

424

06.06.2023 5:44

Max64 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pomoc s úpravou vo vyhľadávači

v Internetový marketing, SEO, reklama

1

548

21.11.2021 14:57

void Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Cookiebar text vo vyhladavaci Google

v HTML, XHTML, XML, CSS

2

392

12.10.2016 8:29

neopagan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pozicia vo vyhladavaci /google.sk/

v Internetový marketing, SEO, reklama

29

3339

06.12.2007 14:14

pa3ck Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vyhladavaci string heureka.sk pre Operu

v Sieťové a internetové programy

2

383

27.07.2012 16:56

mtxd Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pozicia vo vyhladavaci pre rozne prehliadace

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Internetový marketing, SEO, reklama

41

2815

22.06.2009 19:33

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako sa zobrazovat na mape vo vyhladavaci?

v Ostatné

1

378

19.06.2017 13:33

ado130 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mám sa učiť C ++/objective C/ C#?

v Assembler, C, C++, Pascal, Java

5

724

08.07.2014 20:40

XOLOO Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladam hracov na C&C Generals Zero Hour

v Počítačové hry

10

1243

07.03.2007 19:22

Spirit Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. K: PC Literaturu- C++/C#/java/python/ruby/RoR

v Kúpim

0

405

13.05.2014 18:16

expresado Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hledá se programátor C/C++ pro vesmírné projekty (Praha)

v Ponuka práce

0

1116

10.05.2016 14:59

evolvsys Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra