int BSTree_traverse(BSTree *map, BSTree_traverse_cb traverse_cb) { if(map->root) { return BSTree_traverse_nodes(map->root, traverse_cb); } return 0; }
static inline int BSTree_traverse_nodes(BSTreeNode *node, BSTree_traverse_cb traverse_cb ) { int rc = 0; if (node->left) { rc = BSTree_traverse_nodes(node->left, traverse_cb); if (rc != 0) { return rc; } } if (node->right) { rc = BSTree_traverse_nodes(node->right, traverse_cb); if (rc != 0) { return rc; } } return traverse_cb(node); }
void BSTree_traverse(BSTree* map, BSTree_traverse_callback cb) { if(map->root) { BSTree_traverse_nodes(map->root, cb); } }