Supponiamo di aver definito il tipo Tree come una struct che ha un campo intero el che rappresenta l'intero associato al nodo, e due campi puntatori a Tree, left e right che rappresentano rispettivamente il figlio sinistro e il figlio destro. Per realizzare la tua funzione, dapprima scriviamo una funzione ricorsiva che calcola la somma degli elementi di un albero:

codice:
int sum(Tree * tree){
     if(tree == NULL)
          return 0;
     return tree -> el + sum(tree -> left) + sum(tree -> right);
}
La funzione isLeaf ritorna 1 se l'albero è una foglia:

codice:
int isLeaf(Tree * tree){
     return (tree -> left == NULL) && (tree -> right == NULL);
}
A questo punto possiamo scrivere la tua funzione isLeft, che ritorna 1 se e solo se l'albero passato come argomento è sinistro; se l'albero è una foglia ritorna 0, se è NULL ritorna 1:

codice:
int isLeft(Tree *tree){
     //Sull'albero nullo ritorno 1
     if(tree == NULL)
          return 1;
     //Su una foglia ritorno 0
     if(isLeaf(tree))
          return 0;
     //controllo la proprietà sul sottoalbero sinistro
     //se non è una foglia
     if(! isLeaf(tree -> left))
          if(! isLeft(tree -> left))
               return 0;
     //controllo la proprietà sul sottoalbero destro
     //se non è una foglia
     if(! isLeaf(tree -> right))
          if(! isLeft(tree -> right))
               return 0;
     //infine controllo se la somma del sottoalbero
     //sinistro è maggiore della somma del sottoalbero destro
     if(sum(tree -> left) <= sum(tree -> right))
          return 0;
     return 1; 
}