Obsah fóra
PravidláRegistrovaťPrihlásenie




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

Užívateľ
Užívateľ
Binary Tree

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 10.04.2012 18:06

Mám za úlohu vložiť do stromu čísla, aby vyzeral takto:
5
/ \
3 10
/\ \
1 4 16
/ \
13 18
ono je to v podstate jedno, v akom poradí ich tam budem dávať, tak či tak sa mi dajú do tohoto tvaru

Problém je ale v tom, že keď mi príde na prvé porovnávanie, tak do tempu sa mi nedajú hodnoty z konštruktora Node a program logicky spadne, keďže to nemá sčím porovnať. Podľa mňa mám chybu dakde v inserte

Kód:
#include <iostream>

using namespace std;

class Node
{
public:
   int data;
   Node* left,* right;

   Node(int data = -1, Node* left = NULL, Node* right = NULL)
   {
      this->data = data;
      this->left = left;
      this->right = right;
   }
};

class Btree
{
   

public:
   Node* root;
   Btree(Node* root = NULL)
   {
      this->root = root;
   }
   void insert(int value);
};
   

void Btree::insert(int value)
{
   Node* temp = root;

   while(1)
   {
   if(temp->data < value)
   {
      if(temp->left == NULL)
      {
         temp->left = new Node(value);
      }
      else
      {      
         temp = temp->left;
      }
   }

   else
   {
      if(temp->left == NULL)
      {
         temp->right = new Node(value);
      }
      else
      {
         temp = temp->right;
      }
   }
   }
}

int main()
{
   Btree a;
   
   a.insert(1);
   a.insert(3);
   a.insert(5);
   a.insert(4);
   a.insert(10);
   a.insert(18);
   a.insert(13);
   a.insert(16);

   system("pause");
   return 0;
}







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Binary Tree

Registrovaný: 11.01.09
Prihlásený: 26.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 10.04.2012 20:33

Kód:
Btree(Node* root = NULL)
{
    this->root = root;
}

///////////////

Node* temp = root;


root je NULL, cize toto:
Kód:
if(temp->data < value)


ti jednoducho musi spadnut. Hod tam nejaku podmienku, napr:
Kód:
if ( root == NULL )
    root = new Node(nejakaHodnotaNarprikladPrva);


Dalsia vec, nemas vyskok z nekonecnej slucky while(1). Skus si to sam poupravovat, ked bude problem, ozvi sa.


Offline

Užívateľ
Užívateľ
Binary Tree

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok Napísal autor témyOffline : 10.04.2012 22:04

Díky, nevedel som ako vytvoriť ten prvý prvok. Vedel som že ten root je objekt(alebo dačo podobné), že to ešte nemá žiadne konkrétne hodnoty. S triedami ešte len začínam, tak v tom nemám ešte
úplne jasno.
Stým while som ešte nepracoval, ale ked som sa dotoho pustil, tak som tam tú jednotku aj nechal a dal jednoducho return ked mi pridalo hodnotu. Je to podla mna jednoduchsie v tomto prípade, ako
vymýšlať nejaké podmienky
Tu je funkčný kód:

Kód:
void Btree::insert(int value)
{
   Node* temp = root;

      if(root == NULL)
      {
         root = new Node(value);
         return;
      }

   while(1)
   {
      if(temp->data > value)
      {
         if(temp->left == NULL)
         {
            temp->left = new Node(value);
            return;
         }
         else
         {      
            temp = temp->left;
         }
      }

      else
      {
         if(temp->right == NULL)
         {
            temp->right = new Node(value);
            return;
         }
         else
         {
            temp = temp->right;
         }
      }
   }
}







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Odpovedať na tému [ Príspevkov: 3 ] 


Podobné témy

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

v PHP, ASP

5

538

29.11.2007 20:37

Blackshadow Zobrazenie posledných príspevkov

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

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

23

1205

18.04.2012 7:17

Fico Zobrazenie posledných príspevkov

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

v Ostatné programy

2

705

08.09.2008 15:53

apatka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [VYRIESENE] String do binary

v PHP, ASP

2

445

07.03.2009 15:57

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. traverse tree in SQL (najlepsie ORACLE <11g>)

v Databázy

0

326

24.10.2012 18:05

masterpeter Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. SQL Lite binary file open in PHP

v PHP, ASP

4

386

16.03.2016 8:40

BX 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