ZOJ1011哪位高手来帮小弟我解答下

ZOJ1011谁来帮我解答下
这是我的代码,测试数据正确,但是网上提交时失败了,高手来帮我看看,万分感谢。

#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct NODE
{
  int num;
  int left[11],right[11];
}S;
int n,m;
S signal[16][11];
char tree[5000];
int solve(int i,int j)
{
  int k,flag;
  if(tree[j]=='*') 
  if(i>=n-m) return 1;
  else return 0;
  else
  {
  flag=0;
  for(k=1;k<=signal[i][tree[j]-'a'+1].num;k++)
  {
  if(solve(signal[i][tree[j]-'a'+1].left[k],j*2)&&solve(signal[i][tree[j]-'a'+1].right[k],j*2+1))
  flag=1;
  }
  return flag;
  }
   
}
int main()
{
  int k,l,i,j,num,judge;
  char ch;
  scanf("%d%d%d",&n,&m,&k);
  num=0;
  while(m&&n&&k)
  {
  if(num) printf("\n");
  printf("NTA%d:\n",++num);
  for(i=0;i<n;i++)
  for(j=1;j<=k;j++)
  {
  signal[i][j].num=0;
  while(1)
  {
  signal[i][j].num++;
  scanf("%d%d",&signal[i][j].left[num],&signal[i][j].right[num]);  
  ch=getchar();
  if(ch=='\n') break;
  }  
  } 
  scanf("%d",&l);
  while(l!=-1)
  {
  getchar();
  memset(tree,'*',sizeof(tree));
  for(j=1;j<=pow(2,l+1)-1;j++)
  {  
  scanf("%c",&tree[j]);
  getchar();
  }
  judge=solve(0,1);
  if(judge) printf("Valid\n");
  else printf("Invalid\n");
  scanf("%d",&l);
  }
  scanf("%d%d%d",&n,&m,&k);  
  }
  return 0;
}


------解决方案--------------------
探讨
这是我的代码,测试数据正确,但是网上提交时失败了,高手来帮我看看,万分感谢。

#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct NODE
{
    int num;
    int left[11],right[11];
}S;
int n,m;
S signal[16][11];
char tree[5000];
int solve(int i,int j)
{
      int k,flag;
      if(tree[j]=='*')
        if(i>=n-m) return 1;
        else return 0;
      else
      {
            flag=0;
            for(k=1;k <=signal[i][tree[j]-'a'+1].num;k++)
            {
                    if(solve(signal[i][tree[j]-'a'+1].left[k],j*2)&&solve(signal[i][tree[j]-'a'+1].right[k],j*2+1))
                    flag=1;
            }
            return flag;
      }
     
}
int main()