LINUX.ORG.RU

История изменений

Исправление yoghurt, (текущая версия) :

static bool cmp(Tree* t1, Tree* t2) {
    if (t1 && !t2) throw OOPS;
    if (!t1 && t2) throw OOPS;
    if (!t1 && !t2) return true;
    if (t1->data != t2->data) throw OOPS;
    return cmp(t1->left, t2->left) && cmp(t1->right, t2->right);
}

Разве нет? Если же вопрос в том, чтобы при этом не жрать стэк (каюсь, код в ОП пристально не смотрел), то рекурсию же можно смоделировать на куче.

Исправление yoghurt, :

static bool cmp(Tree* t1, Tree* t2) {
    if (t1 && !t2) throw OOPS;
    if (!t1 && t2) throw OOPS;
    if (!t1 && !t2) return true;

    if (t1->data != t2->data) {
        throw OOPS;
    }

    return cmp(t1->left, t2->left) && cmp(t1->right, t2->right);
}

Разве нет? Если же вопрос в том, чтобы при этом не жрать стэк (каюсь, код в ОП пристально не смотрел), то рекурсию же можно смоделировать на куче.

Исходная версия yoghurt, :

KISS

static bool cmp(Tree* t1, Tree* t2) {
    if (t1 && !t2) throw OOPS;
    if (!t1 && t2) throw OOPS;
    if (!t1 && !t2) return true;

    if (t1->data != t2->data) {
        throw OOPS;
    }

    return cmp(t1->left, t2->left) && cmp(t1->right && t2->right);
}

Разве нет? Если же вопрос в том, чтобы при этом не жрать стэк (каюсь, код в ОП пристально не смотрел), то рекурсию же можно смоделировать на куче.