This is a O(N) solution
int fn(root, sum, *count)                                                                               
{                                                                                                   
    if(root == NULL)                                                                                
        return 0;                                                                                                                                                                                       
    int left =  fn(root->left, sum, count);                                                         
    int right = fn(root->left, sum, count);                                                                                                                                                            
    if(left == sum)                                                                                 
        *count++;                                                                                   
    if(right == sum)                                                                                
        *count++;                                                                                   
    if((root->data + left + right) == sum)                                                          
        *count++;                                                                                   
    return (root->data + left + right);                                                             
}