| | |
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
Autor | Správa |
---|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
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 |
|
Registrovaný: 11.01.09 Prihlásený: 26.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 Bydlisko: Kesa |
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 |
|
| Stránka: 1 z 1
| [ Príspevkov: 3 ] | |
| 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
|
|