1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #pragma once
- class RedBlackTreeNode
- {
- public:
- typedef int key_t;
- typedef void *val_t;
- friend class RedBlackTree;
- public:
- RedBlackTreeNode();
- RedBlackTreeNode(key_t, val_t);
- val_t GetEntry() const;
- ~RedBlackTreeNode();
- protected:
- val_t storedEntry;
- key_t key;
- int red;
- RedBlackTreeNode *left;
- RedBlackTreeNode *right;
- RedBlackTreeNode *parent;
- };
- class RedBlackTree;
- class RedBlackTreeIterator
- {
- public:
- friend RedBlackTree;
- typedef int key_t;
- typedef void *val_t;
- RedBlackTreeIterator() : node(0), tree(0) {}
- RedBlackTreeIterator(RedBlackTreeNode *_node, RedBlackTree *_tree) : node(_node), tree(_tree) {}
- void next();
- bool get(val_t *val);
- private:
- RedBlackTreeNode *node;
- RedBlackTree *tree;
- };
- class RedBlackTree
- {
- public:
- typedef int key_t;
- typedef void *val_t;
- public:
- RedBlackTree();
- ~RedBlackTree();
- RedBlackTreeIterator end();
- RedBlackTreeIterator Insert(key_t, val_t);
- RedBlackTreeIterator Search(key_t key);
- RedBlackTreeIterator begin();
- void Delete(key_t key);
- val_t DeleteNode(RedBlackTreeNode *);
- RedBlackTreeNode *GetPredecessorOf(RedBlackTreeNode *) const;
- RedBlackTreeNode *GetSuccessorOf(RedBlackTreeNode *) const;
- size_t size() const;
-
- protected:
-
-
-
-
-
-
- RedBlackTreeNode *root;
- RedBlackTreeNode *nil;
- void LeftRotate(RedBlackTreeNode *);
- void RightRotate(RedBlackTreeNode *);
- void TreeInsertHelp(RedBlackTreeNode *);
- void TreePrintHelper(RedBlackTreeNode *) const;
- void FixUpMaxHigh(RedBlackTreeNode *);
- void DeleteFixUp(RedBlackTreeNode *);
- size_t numElements;
- };
|