24 bst_t *t = malloc(
sizeof(*t));
56 if (!t->
root)
return false;
62 if (value < cur->value) {
65 if (!cur->
left)
return false;
70 }
else if (value > cur->
value) {
73 if (!cur->
right)
return false;
88 if (value < cur->value) cur = cur->
left;
96 if (!t || !t->
root)
return false;
99 if (out_value) *out_value = cur->
value;
104 if (!t || !t->
root)
return false;
107 if (out_value) *out_value = cur->
value;
114 void (*visit)(
int,
void *),
118 visit(n->
value, ctx);
123 void (*visit)(
int,
void *),
125 if (!t || !visit)
return;
void bst_in_order(const bst_t *t, void(*visit)(int, void *), void *ctx)
bool bst_max(const bst_t *t, int *out_value)
size_t bst_size(const bst_t *t)
static bst_node_t * make_node(int v)
bool bst_min(const bst_t *t, int *out_value)
void bst_destroy(bst_t *t)
static void in_order_recursive(const bst_node_t *n, void(*visit)(int, void *), void *ctx)
bool bst_contains(const bst_t *t, int value)
struct bst_node bst_node_t
static void destroy_subtree(bst_node_t *n)
bool bst_insert(bst_t *t, int value)
Binary search tree of int (no balancing — O(log n) average, O(n) worst-case on sorted input).