Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int
- dt_insert(dt_t **t, mkey_t x, int y, mvalue_t v) {
- dt_t *tmp;
- #ifdef UNIQ_KEYS // Если определяем ДД с уникальными ключами, включить след. строки.
- tmp = dt_search(*t, x); // Ищем значение x в ДД t.
- if(tmp) { // Если найдено, то...
- // printf("Replaced key %d value %d changed to %d\n", x, (*t)->v, v);
- tmp->v = v; // заменяем значение на новое
- return BT_UPDATED; // возвращаем значение, то проапдейтили значение по ключу, а не добавили новый.
- }
- #endif // Если при компиляции не указан UNIQ_KEYS, то даже если ключ x существует в ДД t, будет добавлена
- // новая нода с таким же ключом.
- if (*t == NULL || y > (*t)->y) {
- tmp = dt_newnode(x, y, v);
- dt_split(*t, x, &(tmp->l), &(tmp->r));
- *t = tmp;
- return BT_ADDED;
- } else if ( x < (*t)->x) {
- return dt_insert(&((*t)->l), x, y, v);
- } else {
- return dt_insert(&((*t)->r), x, y, v);
- }
- }
Add Comment
Please, Sign In to add comment