Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct fibnode *fibheap_find_key(struct fibheap *heap, struct fibnode *h, int key)
- {
- struct fibnode *x = h;
- struct fibnode *p = NULL;
- if(x->left == x && x->key != key && x->child == NULL) // если в куче один единственный элемент и он не подходит
- return p;
- while((x != h->left || x == h->left) && p == NULL) { // проход по циклическому списку (|| x == h->left) используется для предотвращения пропуска элемента h->left
- if(x->key == key) {
- p = x; //нашли элемент, p больше не NULL, выходим из while.
- }
- if(x->child != NULL && x->degree >= 2) // если у узла два и больше детей, то рекурсивно рассматриваем "детский" цикл. сп.
- p = fibheap_find_key(heap, x->child, key);
- else if (x->child != NULL && x->degree == 1) { // если ребёнок только один, то проверяем этого ребёнка
- if(x->child->key == key) {
- p = x->child;
- }
- }
- x = x->right; //двигаемся вправо по цикл.списку
- }
- return p; // возвращаем либо адрес нужного узла, либо NULL
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement