[ 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 | 8
NapísalOffline : 28.10.2014 17:40 | Binarniy vyhladavaci strom [C]

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 | 3
NapísalOffline : 28.10.2014 18:18 | Binarniy vyhladavaci strom [C]

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!
 [ Príspevkov: 2 ] 


Binarniy vyhladavaci strom [C]



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

2133

25.02.2009 21:18

stewe

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

Strom z cesty

v PHP, ASP

1

356

05.02.2014 17:49

killer

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

Slovnik pre lexikograficky strom.

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

0

909

06.04.2008 10:25

danciwo

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

Vyhladavaci skript

v PHP, ASP

15

1212

22.10.2008 22:14

Blackshadow

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

Vyhľadavací robot

v PHP, ASP

8

679

21.10.2007 22:05

Bananslovak

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

516

06.06.2023 5:44

Max64

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

Cookiebar text vo vyhladavaci Google

v HTML, XHTML, XML, CSS

2

431

12.10.2016 8:29

neopagan

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

pozicia vo vyhladavaci /google.sk/

v Internetový marketing, SEO, reklama

29

3380

06.12.2007 14:14

pa3ck

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

600

21.11.2021 14:57

void

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

415

27.07.2012 16:56

mtxd

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

2883

22.06.2009 19:33

Tominator

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

Ako sa zobrazovat na mape vo vyhladavaci?

v Ostatné

1

426

19.06.2017 13:33

ado130

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

796

08.07.2014 20:40

XOLOO

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

1295

07.03.2007 19:22

Spirit

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

463

13.05.2014 18:16

expresado

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

rozdiel medzi Borland 3.1 C++ vs Net. C++

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

4

620

20.07.2010 12:54

walther



© 2005 - 2024 PCforum, edited by JanoF