static int subtree_is_valid(pqueue_t *q, int pos) { if (left(pos) < q->size) { /* has a left child */ if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[left(pos)]))) return 0; if (!subtree_is_valid(q, left(pos))) return 0; } if (right(pos) < q->size) { /* has a right child */ if (q->cmppri(q->getpri(q->d[pos]), q->getpri(q->d[right(pos)]))) return 0; if (!subtree_is_valid(q, right(pos))) return 0; } return 1; }
int pqueue_is_valid(pqueue_t *q) { return subtree_is_valid(q, 1); }