我觉得这题目有鬼

输入
输入有2n+1行。
第一行为组数n;
接下来有2n行,每2行是一组。一组中的第1行是给定的二叉树,第2行是待插入的元素。
树中的元素为int,可能有多位。
输出
输出一共有n行,分别对应插入指定元素后的二叉排序树。
输入样列
2
1(,3(2,7(4,9)))
5
45(24(12,28),53(,90))
80
输出样例
1(,3(2,7(4(,5),9)))
45(24(12,28),53(,90(80,)))
提示
(1)以字符串的形式读入。
(2)然后把数字分离出来。

上面是题目,下面是我的代码,老是WA,但我觉得都没错啊,如果关键字是负的,我也考虑过。

include <stdio.h>

include <stdlib.h>

include <string.h>

typedef struct BSTreeNode
{ int data;

struct BSTreeNode* left;
struct BSTreeNode* right;

}BSTreeNode;
typedef BSTreeNode* BSTree;
BSTree NewNode(int data)
{ BSTree p=(BSTree)malloc(sizeof(BSTreeNode));

p->data=data;
p
->left=p->right=NULL;
return p;

}
BSTree InsertNode(BSTree root,int data)
{ if(root==NULL) return NewNode(data);

if(root->data>=data)  root->left=InsertNode(root->left,data);
else if(root->data<data)root->right=InsertNode(root->right,data);
return root;

}
int StrToInt(char s[])
{ int sum=0,t=1,n=strlen(s);

for(int i=n-1;i>=0;--i)
{   sum+=(s[i]-48)*t;
    t
*=10;
}
return sum;

}
int JudgeIntchar(char u)
{ if(48<=u&&u<=57)

    return 1;
return 0;

}
BSTree Solve(char s[],int m)
{ int i,j;

int num,v;
char res[1001];
BSTree root=NULL;
for(i=0;s[i]!='\0';++i)
{   if(JudgeIntchar(s[i])==0)   continue;
    v
=0;
   
for(j=i;s[j]!='\0';j++)
   
{   if(JudgeIntchar(s[j])==0)
           
break;
        res
[v]=s[j],++v;
   
}
    i
=j-1;
    res
[v]='\0';
    num
=StrToInt(res);      
    root
=InsertNode(root,num);
}
root
=InsertNode(root,m);
return root;

}
void PrintBSTree(BSTree root)
{ if(root==NULL) return;

printf("%d",root->data);
if(root->left==NULL&&root->right==NULL)   return;
printf
("(");
if(root->left!=NULL) PrintBSTree(root->left);
printf
(",");
if(root->right!=NULL)    PrintBSTree(root->right);
printf
(")");  

}
int main()
{ int n,m;

char s[1001];
BSTree root;
scanf
("%d",&n);getchar();
while(n--)
{   gets(s);
    scanf
("%d",&m);   getchar();
    root
=Solve(s,m);    
   
PrintBSTree(root);  
    printf
("\n");
}
return 0;

}

感谢您为本话题评分。
以下是预览效果,请确认排版好了再点回复。
如果你认为此话题有广告、灌水的嫌疑,请给此话题评一颗星。平均分低的话题将不会再显示。
良好的讨论氛围由大家共同维护。