Phone List --字典树

题目

刚开始定义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;
}
原文地址:https://www.cnblogs.com/WDKER/p/5501351.html