coming的专栏

<span style="font-family: Arial, Helvetica, sans-serif;">#include <bits/stdc++.h></span>using namespace std;const int MA=10;const char MU='0';struct dian{int sum;dian *next[MA];dian ()//构造函数{sum=0;for(int i=0;i<MA;++i)next[i]=NULL;}};class tree{dian *tou;void dfs(dian *p,int n,vector<string> &jb,char *s)//先序遍历,按字典序排序,结果存在vector中{if(p->sum){s[n]='\0';string sb=s;for(int i=0;i<p->sum;++i)//去掉这个循环可去重jb.push_back(sb);}//这里没有rerurn因为可能是以让为前缀的字串for(int i=0;i<MA;++i){if(p->next[i]!=NULL){s[n]=i+MU;dfs(p->next[i],n+1,jb,s);s[n]='\0';}}}bool des(const string &s,int k,int n,dian *p)//1表示根节点上有其他值0表示空可删该点{if(k==n){p->sum=0;for(int i=0;i<MA;++i)if(p->next[i]!=NULL)return true;delete p;return false;}int q=s[k]-MU;if(p->next[q]==NULL)return false;if(des(s,k+1,n,p->next[q]))return true;p->next[q]=NULL;for(int i=0;i<MA;++i)if(p->next[i]!=NULL)return true;delete p;return false;}void clear(dian *p)//清空,后序遍历{if(p==NULL) return;for(int i=0;i<MA;++i) if(p->next[i]!=NULL) clear(p->next[i]);delete p;}public:tree()//构造{tou=new dian;}void insert(const string &s)//插入操作{dian *p=tou;for(int i=0,n=s.size();i<n;++i){int adc=s[i]-MU;if(p->next[adc]==NULL)p->next[adc]=new dian;p=p->next[adc];}++(p->sum);}void xianxu(vector<string> &jb)//外部传参数的位置{char s[100];dfs(tou,0,jb,s);}bool fand(const string &s)//查找s存在,改成Int可以返回他的个数{dian *p=tou;for(int i=0,n=s.size();i<n;++i){int adc=s[i]-MU;if(p->next[adc]==NULL)return false;p=p->next[adc];}if(p->sum)return true;return false;}~tree()//析构清空{clear(tou);}void del(const string &s)//删除传参位置{int n=s.size();des(s,0,n,tou);}};

,但一定要背上几本书,在花海里,草丛旁悠然品味,

coming的专栏

相关文章:

你感兴趣的文章:

标签云: