+ if (!tree->root)
+ {
+ new = avl_alloc_node();
+ new->data = data;
+ avl_insert_top(tree, new);
+ }
+ else
+ {
+ closest = avl_search_closest_node(tree, data, &result);
+ switch(result)
+ {
+ case -1:
+ new = avl_alloc_node();
+ new->data = data;
+ avl_insert_before(tree, closest, new);
+ break;
+ case 1:
+ new = avl_alloc_node();
+ new->data = data;
+ avl_insert_after(tree, closest, new);
+ break;
+ default:
+ return NULL;
+ }
+ }
+
+#ifdef AVL_COUNT
+ new->count = 1;
+#endif
+#ifdef AVL_DEPTH
+ new->depth = 1;
+#endif