Salve, dovrei scrivere un programma C che verifichi se un albero, rappresentato con una stringa attraverso parentesi tonde, è binario o meno e in caso lo sia scriva a schermo B altrimenti N.

Ho implementato il seguente codice e testandolo ho trovato un caso in cui non funziona, qualcuno mi sa dire dove sia il problema? Grazie!

codice:
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 


char visita(char * s, int i, int n, char b, int c){
    while(i<=n&&s[i]!=')'){
            if(s[i]=='('){
                c = 1;
                i = i + 1;
                visita (s, i, n, b, 0);
            }else{
                if(s[i]==')'){
                }else{
                    c = c + 1;
                }
            }
    i = i + 1;
    }
    if(c>2) {b = 'N';}
        
    return b;
}


int main(int argc, char *argv[]) 
{ 
    char s[100];
    char b = 'B';
    int c = 0, n = 0, i = 1;
    
    // trasferimento degli argomenti della linea di comando
    strcpy(s, argv[1]);
    
    // calcolo della lunghezza della stringa s
    n = strlen(s);
    
    // chiamata della funzione visita che controlla se l'albero è binario 
    // e stampa del valore di ritorno
    printf("%c", visita(s, i, n, b, c));
    return 0;
}
L'ho testato con i seguenti alberi ottenendo questi risultati:

1 B
(12) B
(123) N
(1(23)) B

e fin qui sono giusti, ma per l'albero seguente mi rileva che è Binario quando invece Non lo è.

((12)(1(23)3))