Archief - [PROG][C++] binairy tree

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

keybern

Legacy Member
pff, diene c++ hé. Vreselijk als je Java gewoont bent...

Hier volgt slechts een deel van mn code voor een binairy tree.
Wat is er mis met de zwartgedrukte regel?

Code:
struct TreeNode {
       int item;
       TreeNode *left;
       TreeNode *right;
};

class Tree {
      private:
             TreeNode *root;
      public:
      Tree() {
             root = NULL;
      }
      
      ~Tree() {
      }
      
      void addItem(int item) {
              if (root != NULL) addItem(root, item);
              else {
                   TreeNode *newNode = new TreeNode;
                   newNode->item = item;
                   [COLOR="Black"]root = newNode;[/COLOR]
              }
      }

      void addItem(TreeNode *position,int item) {
           if (item < position->item) {
                    if (position->left != NULL) addItem(position->left,item);
                    else {
                         TreeNode *newNode = new TreeNode;
                         newNode->item = item;
                         position->left = newNode;
                    }
           } else {
                    if (position->right != NULL) addItem(position->right,item);
                    else {
                         TreeNode *newNode = new TreeNode;
                         newNode->item = item;
                         position->right = newNode;
                    }
           }
      }

Compiler geeft geen errors, maar mn console springt altijd uit zonde iets te tonen. (jaja, heb system("PAUSE") voorzien op einde van mn main-methode )

BuiZe

Legacy Member
probeer dit eens:
Code:
              else {
                   TreeNode *newNode = new TreeNode;
                   newNode->item = item;
[color=red]                   newNode->left = NULL;
                   newNode->right = NULL;[/color]
                   root = newNode;
              }
Anders zit je met niet-geinitialiseerde pointers, en dat is nooit goed. Idem voor de 2 gevallen in addNode().

keybern

Legacy Member
k, that did the trick. Wat een n00b-fout, ben het echt ni gewoon.

EagleEye

Legacy Member
Ik wil hier geen rellen uitlokken ofzo :p maar is het geen slechte gewoonte om in C++ NULL te schrijven?
Normaal is het beter om 0 te schrijven voor een null pointer...

Tyfius

Legacy Member
Afaik is in C++ NULL op 0 gedefinieerd.
Uit stdlib.h:
Code:
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
edit: iostream includes istream > ostream > ios > xlocnum > cstdlib > stdlib.h voor zij die het zich afvragen...

killgore

Legacy Member
EagleEye zei:
Ik wil hier geen rellen uitlokken ofzo :p maar is het geen slechte gewoonte om in C++ NULL te schrijven?
Normaal is het beter om 0 te schrijven voor een null pointer...

Als je echt heel zeker wilt zijn kan je nog een ifndef NULL toevoegen of zelfs expliciet checken of NULL == 0.

Met NULL werken is duidelijker als met 0 IMHO omdat je zo duidelijk ziet dat je bezig bent met pointers en niet met getallen.

BuiZe

Legacy Member
In theorie zou 0 "properder" zijn, maar elke zichzelf respecterende C++ compiler zal NULL definen als 0. Verder vind ik het gewoon een veel duidelijker onderscheid tussen een pointer en een int (x = 0; zegt op het eerste zicht minder dan x=NULL; )

edit: killgore was me te vlug af :)

wlibaers

Legacy Member
BuiZe zei:
In theorie zou 0 "properder" zijn, maar elke zichzelf respecterende C++ compiler zal NULL definen als 0. Verder vind ik het gewoon een veel duidelijker onderscheid tussen een pointer en een int (x = 0; zegt op het eerste zicht minder dan x=NULL; )

edit: killgore was me te vlug af :)

Als je zo gaat beginnen is het trouwens ook een minder goede stijl om 'x' als naam voor een pointer te gebruiken. Bij die éénletter variabelen is het typische gebruik voor x, y en z als coördinaten, net zoals i, j en k tellers voor loops zijn. Pointers zijn typisch p (of s voor strings) en de volgende letters.

killgore

Legacy Member
wlibaers zei:
Als je zo gaat beginnen is het trouwens ook een minder goede stijl om 'x' als naam voor een pointer te gebruiken. Bij die éénletter variabelen is het typische gebruik voor x, y en z als coördinaten, net zoals i, j en k tellers voor loops zijn. Pointers zijn typisch p (of s voor strings) en de volgende letters.

lol

zen x was nu ook maar een simpel vb. he :p.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan