if( условие A ){
// блок 1
if( условие B ) {
// блок 2
} else {
// блок 3
}
// блок 4
}
назвал условия и блоки кода для наглядности. Можно отрефакторить это так:
bool A = calculateA();
bool B = calculateB();
if( A && B ){
// блок 1
// блок 2
// блок 4
} else if ( А ) {
// блок 1
// блок 3
}
блок 1 следует вынести в какую-то функцию, видимо, чтобы избежать дублирования.
Ну и плюс не факт, что так получится, зависит еще, как минимум, от логики вычисления А и В.
if получился сомнительный, конечно, но как вариант.