[2] | 1 | /* Author : Rick van der Zwet
|
---|
| 2 | * S-number : 0433373
|
---|
| 3 | * Version : $Id: trie.h 322 2007-11-22 14:09:00Z rick $
|
---|
| 4 | * Copyright : FreeBSD Licence
|
---|
| 5 | */
|
---|
| 6 |
|
---|
| 7 | #ifndef TRIE_H
|
---|
| 8 | #define TRIE_H
|
---|
| 9 | template <class InfoTp>
|
---|
| 10 | class TrieNode
|
---|
| 11 | {
|
---|
| 12 | public:
|
---|
| 13 | TrieNode();
|
---|
| 14 | ~TrieNode();
|
---|
| 15 | InfoTp Value; // Value of TrieNode
|
---|
| 16 | TrieNode *One, // Pointer to node if bit is set 1
|
---|
| 17 | *Zero, // Pointer to node if bit is set 0
|
---|
| 18 | *Parent; // Pointer to parent node
|
---|
| 19 | };
|
---|
| 20 |
|
---|
| 21 |
|
---|
| 22 | template <class InfoTp>
|
---|
| 23 | class Trie
|
---|
| 24 | { public:
|
---|
| 25 | // Constructor, create new Trie, only root
|
---|
| 26 | Trie ();
|
---|
| 27 | // Destructor
|
---|
| 28 | ~Trie ();
|
---|
| 29 | //Test wether window is at leaf
|
---|
| 30 | bool AtLeaf ();
|
---|
| 31 | // Place window on Root
|
---|
| 32 | void GoRoot ();
|
---|
| 33 | // Check wether current knob has child K
|
---|
| 34 | bool ExistsChild (char K);
|
---|
| 35 | // Place window at child K of current knob
|
---|
| 36 | void GoChild (char K);
|
---|
| 37 | // First child of current knob, '\0' if child has no children
|
---|
| 38 | char FirstChild ();
|
---|
| 39 | // Get next child of current knob, '\0' if none
|
---|
| 40 | char NextChild (char K);
|
---|
| 41 | // Add child K, if already exists do nothing
|
---|
| 42 | void AddChild (char K);
|
---|
| 43 | // Remove child, do nothing if not exists
|
---|
| 44 | void RemoveChild (char K);
|
---|
| 45 | // Place information in current knob
|
---|
| 46 | void PutInfo (InfoTp I);
|
---|
| 47 | // Get information of current knob
|
---|
| 48 | InfoTp GetInfo ();
|
---|
| 49 | // PLace window of knob provided
|
---|
| 50 | void GotoNode (TrieNode<InfoTp> *Nd);
|
---|
| 51 | // Get address of current knob
|
---|
| 52 | TrieNode<InfoTp> *GetNode ();
|
---|
| 53 | private:
|
---|
| 54 | TrieNode<InfoTp> *Window, //het venster
|
---|
| 55 | *NodeFound, //store value node if exists
|
---|
| 56 | *Root; //de wortel
|
---|
| 57 | };
|
---|
| 58 |
|
---|
| 59 |
|
---|
| 60 | #endif
|
---|