BINRIPUUTIETORAKENTEEN YLEISKUVAUS
Last updated 16.12.98 (iak)

/*===================  B I N A R Y   T R E E   ========================*/


#define BintreeSize(tree) ((tree)->nnodes)

  Palauttaa puussa olevien solmujen (data-alkioiden) lukumrn.


void    InitBintree(BINTREE* tree,
                    int (*compf)(void* a, void* b, void* info));

  Alustaa binripuun. Vertailufunktion 'compf' palautusarvojen on
  oltava seuraavat:

  -1, jos 'a' <  'b'
   0, jos 'a' == 'b'
   1, jos 'a' >  'b'

  Yhtsuuri alkio listn oikeaksi lapseksi.


void*   DeleteMinimumFromBintree(BINTREE* tree);

  Poistaa binripuusta pienimmn alkion ja palauttaa sen. Jos puu on
  tyhj, palautetaan NULL.


void*   DeleteMaximumFromBintree(BINTREE* tree);

  Poistaa binripuusta suurimman alkion ja palauttaa sen. Jos puu on
  tyhj, palautetaan NULL.


void*   DeleteNodeFromBintree(BINTREE* tree, void* d, void* info);

  Poistaa binripuusta alkion 'd' ja palauttaa sen. Jos alkio ei ole
  puussa, palautetaan NULL.


void    InsertToBintree(BINTREE* tree, void* d, void* info);

  Lis alkion 'd' binripuuhun. Jos alkio 'd' on jo puussa, uusi
  'd' listn olemassaolevan oikeaksi lapseksi.


void*   InsertToBintreeNoDuplicates(BINTREE* tree, void* d, void* info);

  Lis alkion 'd' binripuuhun. Jos alkio 'd' on jo puussa,
  palautetaan osoitin puussa olevaan data-alkioon 'd'. Jos 'd' ei ole
  puussa, se listn sinne ja palautetaan NULL.


void*   FindFromBintree(BINTREE* tree, void* d, void* info);

  Palauttaa alkion d binripuusta. Jos alkio ei ole puussa, palautetaan
  NULL. Alkio j puuhun, eli sit ei poisteta.


void    FreeBintree(BINTREE* tree);

  Tyhjentn puun. Vapauttaa solmujen varaaman tilan, asettaa
  tarvittavat osoittimet ja laskurit NULL- ja 0-arvoiksi


int     CheckBintree(BINTREE* tree);

  Debug-kyttn. Tarkastaa puun eheyden. Palauttaa rakenteesta
  lydettyjen ja rakenteeseen talletetun solmujen lukumrn erotuksen.

void    ClearBintreeIterator(STACK* s);

  Vapauttaa iteraattorin varaaman muistin.


void    InitPreOrderBintree(BINTREE* tree, STACK* s);

  Alustaa puun esijrjestysiteraattorin 's'.


void*   PreOrderBintree(STACK* s);

  Palauttaa seuraavan data-alkion esijrjestyksess.


void    InitInOrderBintree(BINTREE* tree, STACK* s);

  Alustaa puun vlijrjestysiteraattorin 's'.


void*   InOrderBintree(STACK* s);

  Palauttaa seuraavan data-alkion vlijrjestyksess.

void    IterateBintreeWithCallback(BINTREE* tree,
                                   BINTREE_ORDER order,
                                   int (*callbackf)(void*));

  Lpiky puuta ja kutsuu annettua funktiota parametrina puuhun varastoidut
  data-alkiot kunnes funktio palauttaa nollasta eroavan arvon tai koko puu
  on lpikyty. "order" mritt jrjestyksen seuraavasti:
    PREORDER  - callback, left, right
    INORDER   - left, callback, right
    POSTORDER - left, right, callback
