首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

foj1512下面的题目,求大神解答,为啥运行时异常。

2012-10-12 
foj1512上面的题目,求大神解答,为啥运行时错误。。。。。C/C++ code#includestdio.hstruct node{char cnode

foj1512上面的题目,求大神解答,为啥运行时错误。。。。。

C/C++ code
#include<stdio.h>struct node{    char c;    node *l;    node *r;};void mid_visit(node *p){    if(p->l!=NULL)        mid_visit(p->l);    printf("%c",p->c);    if(p->r!=NULL)        mid_visit(p->r);}void main(){    int n,i,m,r,k;    char d;    while(scanf("%d",&n)!=EOF)    {        node *p=new node[n+1];        for(i=1;i<=n;i++)        {            scanf("%d%d%d",&m,&r,&k);            while(scanf("%c",&d),d==' ');            p[i].c=d;            if(r!=0) p[i].l=&p[r];            else p[i].l=NULL;            if(k!=0) p[i].r=&p[k];            else p[i].r=NULL;        }                mid_visit(&p[1]);        printf("\n");        delete []p;    }}


[解决办法]
此题要注意:
(1)输入的节点不一定是按顺序的;
(2)第一行的节点不一定是根节点。

例如:
7
2 0 0 a
1 2 3 =
3 4 5 +
4 0 0 b
5 6 7 +
6 0 0 c
7 0 0 d

请参考以下修改:
C/C++ code
#include<stdio.h>#include<string.h>struct node{    char c;    node *l;    node *r;};void mid_visit(node *p){    if(p->l!=NULL)        mid_visit(p->l);    printf("%c",p->c);    if(p->r!=NULL)        mid_visit(p->r);}int flag[102];//addvoid main(){    int n,i,m,r,k;    char d;    while(scanf("%d",&n)!=EOF)    {        node *p=new node[n+1];        memset(flag, 0, sizeof flag);//add        for(i=1;i<=n;i++)        {            scanf("%d%d%d",&m,&r,&k);            if(r)flag[r]=1;//add            if(k)flag[k]=1;//add            while(scanf("%c",&d),d==' ');            p[m].c=d;//p[i].c=d;            if(r!=0) p[m].l=&p[r];//if(r!=0) p[i].l=&p[r];            else p[m].l=NULL;//else p[i].l=NULL;            if(k!=0) p[m].r=&p[k];//if(k!=0) p[i].r=&p[k];            else p[m].r=NULL;//else p[i].r=NULL;        }        for(i=1;i<=n&&flag[i];i++);        mid_visit(&p[i]);//mid_visit(&p[1]);        printf("\n");        delete []p;    }} 

热点排行