刚开始定义node 变量,之后删除时出现run error ,之后问了别人, 知道 delete 只能删除堆的内存,所以定义了node *root=new node ,AC了。
注:new 和delete 只能用堆里的内存 即new 的内存
再就是注意建完一次树之后就删了建的树。要不内存超出。。。
#include <iostream> #include <cstdio> #include <cstring> using namespace std; bool flag; typedef struct node { int cnt; struct node *next[10]; node() { memset(next,NULL,sizeof(next)); cnt=0; } }node ; char s[20]; void buildtrid(node *root) { node *p=root; int l=strlen(s); node *tmp; for(int i=0;i<l;i++) { if(p->next[s[i]-'0']==NULL) { tmp=new node; p->next[s[i]-'0']=tmp; } p=p->next[s[i]-'0']; if(p->cnt!=0) flag=false; } for(int i=0;i<10;i++) if(p->next[i]!=NULL) { flag=false; break; } p->cnt++; } void del(node *root) { for(int i=0;i<10;i++) { if(root->next[i]) del(root->next[i]); } delete root; } int main() { int n,m; scanf("%d",&n); while(n--) { flag=true; node *root=new node; scanf("%d",&m); while(m--) { scanf("%s",s); if(!flag)continue; buildtrid(root); } if(flag) printf("YES "); else printf("NO "); del(root); } return 0; }