]> git.lizzy.rs Git - dragonstd.git/blob - bintree.h
Add binary tree traversion
[dragonstd.git] / bintree.h
1 #ifndef _DRAGONTYPE_BINTREE_H_
2 #define _DRAGONTYPE_BINTREE_H_
3
4 #include <stddef.h>
5
6 struct Bintree;
7
8 typedef struct BintreeNode
9 {
10         void *key;
11         void *value;
12         struct BintreeNode *left;
13         struct BintreeNode *right;
14 } BintreeNode;
15
16 typedef int (*BintreeComparator)(void *v1, void *v2, struct Bintree *tree);
17 typedef void (*BintreeTraversionFunction)(BintreeNode *node, void *arg);
18
19 typedef struct Bintree
20 {
21         BintreeNode *root;
22         size_t key_size;
23         BintreeComparator cmp;
24 } Bintree;
25
26 typedef enum
27 {
28         BTT_PREORDER,
29         BTT_INORDER,
30         BTT_POSTORDER,
31 } BintreeTraversion;
32
33 Bintree bintree_create(size_t key_size, BintreeComparator cmp);
34 BintreeNode **bintree_search(Bintree *tree, void *key);
35 void bintree_add_node(Bintree *tree, BintreeNode **nodeptr, void *key, void *value);
36 void bintree_traverse(Bintree *tree, BintreeTraversion traversion, BintreeTraversionFunction func, void *arg);
37 void bintree_clear(Bintree *tree, BintreeTraversionFunction func, void *arg);
38
39 #endif