Функция выглядит правильно, но у меня есть несколько стилистических комментариев. Во-первых, попробуйте назвать это как-нибудь иначе, signal
- очень распространенная функция в операционных системах POSIX.
Во-вторых, я бы либо включал фактические вызовы функций в оператор if, либо просто имел 4 оператора if, каждый из которых возвращался, для оценки короткого замыкания и (субъективно) немного очищать код. То есть либо:
return (signal(orig, n->neChild, tolerance) ||
signal(orig, n->nwChild, tolerance) ||
signal(orig, n->swChild, tolerance) ||
signal(orig, n->seChild, tolerance));
или
if (signal(orig, n->neChild, tolerance))
return true;
if (signal(orig, n->nwChild, tolerance))
return true;
if (signal(orig, n->swChild, tolerance))
return true;
if (signal(orig, n->seChild, tolerance))
return true;
return false;
Наконец, я хотел бы добавить, что я либо создам новый класс, производный от QtreeNode, который реализует метод, подобный nodeDifference
, либо просто добавлю его, если вы управляете источником QtreeNode, который может очистить ваш код дальше, т.е.
bool signal(QtreeNode *&orig, QtreeNode *&n, int tolerance) {
if (n->isLeaf())
return (orig->nodeDifference(*n) > tolerance);
else
return (signal(orig, n->neChild, tolerance) ||
signal(orig, n->nwChild, tolerance) ||
signal(orig, n->swChild, tolerance) ||
signal(orig, n->seChild, tolerance));
}