| #include <search.h> | |
| #include "tsearch.h" | |
| static void walk(const struct node *r, void (*action)(const void *, VISIT, int), int d) | |
| { | |
| if (!r) | |
| return; | |
| if (r->h == 1) | |
| action(r, leaf, d); | |
| else { | |
| action(r, preorder, d); | |
| walk(r->a[0], action, d+1); | |
| action(r, postorder, d); | |
| walk(r->a[1], action, d+1); | |
| action(r, endorder, d); | |
| } | |
| } | |
| void twalk(const void *root, void (*action)(const void *, VISIT, int)) | |
| { | |
| walk(root, action, 0); | |
| } |