00001
00030 #ifndef _TREEMAP_
00031 #define _TREEMAP_
00032
00033 #include "iterator.h"
00034
00038 typedef enum eBFactor{L,E,R}BFactor;
00039
00043 typedef struct sTreeNode
00044 {
00046 void* key;
00048 void* value;
00050 BFactor bf;
00052 struct sTreeNode* super;
00054 struct sTreeNode* left;
00056 struct sTreeNode* right;
00057 }STreeNode;
00058
00062 typedef STreeNode* TreeNode;
00063
00067 typedef struct sTreeMap
00068 {
00070 int(*keyComp)(void*,void*);
00072 int size;
00074 TreeNode root;
00075 }STreeMap;
00076
00080 typedef STreeMap* TreeMap;
00081
00082
00083
00097 TreeMap newTree(int(*keyComp)(void*,void*));
00098
00109 int treeSetKComp(TreeMap tree,int(*keyComp)(void*,void*));
00110
00119 void treeDelete(TreeMap tree);
00120
00137 int treeInsert(TreeMap tree,void* key,void* value,int replace);
00138
00158 int treeRemove(TreeMap tree,void* key,void** value,void(*del)(void*));
00159
00177 int treeGet(TreeMap tree,void* key,void** value);
00178
00189 int treeIsAVL(TreeMap tree);
00190
00198 int treeHeight(TreeMap tree);
00199
00208 int treeSize(TreeMap tree);
00209
00221 int treeInOrder(TreeMap tree,void(*fun)(void*,void*));
00222
00234 int treePreOrder(TreeMap tree,void(*fun)(void*,void*));
00235
00247 int treePosOrder(TreeMap tree,void(*fun)(void*,void*));
00248
00261 Iterator treeKeys(TreeMap tree);
00262
00275 Iterator treeValues(TreeMap tree);
00276
00277 #endif