TridTree

參考了人家的代碼,還是寫轉載吧。
#include<iostream>
#include<cstring>
#define num_chars 26
//只能插入英文字母
using namespace std;
class Trid_node
{ private: 
	char* words;
	int n;
	Trid_node* branch[num_chars];
  public:
    Trid_node()
	{ words=NULL;
	  n=0;//匹配次數
	  for(int i=0;i<num_chars;i++)branch[i]=NULL;
	}
  friend class Trid_Tree;
};
class Trid_Tree
{ private: 
     Trid_node* root;
	 char s[10];
  public:
  bool   TTinsert(Trid_node* root,char* word);
  bool	 TTsearch(Trid_node* root,char* word);
  void	 TTprintall(Trid_node* root);
  Trid_Tree()
  {s[0]='\0';}
} ;
bool Trid_Tree::TTinsert(Trid_node* root,char* word)
{  if(word==NULL || root==NULL) return 0;
   char c;
   c=*word;
   int len=strlen(s);
   s[len]=c;s[len+1]='\0';
   if( c>='A' && c<='Z' ) c=c-'A';
   else if(c>='a' && c<='z') c=c-'a';
   if(root->branch[c]==NULL) { Trid_node* t=new(Trid_node);
                               root->branch[c]=t;
							 }
   word++;
   if( *word!='\0') {return TTinsert(root->branch[c],word);}
   else { 
           (root->n)++; 
		    int i=strlen(s);
		    root->words= new char[i+1];
			*(root->words)='\0';
			strcat(root->words,s);
			s[0]='\0';
			return 1; }
}
bool Trid_Tree::TTsearch(Trid_node* root,char *word)
{ if(!root)return 0;//保證word不空
  char c=*word;
  if(c>='A' && c<='Z') c=c-'A';
  else if(c>='a' && c<='z') c=c-'a';
  if(root->branch[c]==NULL)return 0;//不存在這個關鍵字
  word++;
  if(*word){ return TTsearch(root->branch[c],word); }//word不空,深入查
  else { if( root->n>0) return 1; //word空了
		 else return 0;
	   }
}
void Trid_Tree::TTprintall(Trid_node* root)
{ if(!root) return;
  if(root->words&& root->n) cout<<root->words<<endl;
  for(int i=0;i<26;i++)
     if(root->branch[i]) 
	      TTprintall(root->branch[i]);
}
int main()
{ Trid_node* root=new(Trid_node);
  Trid_Tree tt;
  tt.TTinsert(root,"green");
  tt.TTinsert(root,"blue");
  tt.TTinsert(root,"yellow");
  tt.TTinsert(root,"red");
  tt.TTinsert(root,"orange");
  tt.TTprintall(root);
  char s1[]="abcdedddddd";
  for(int i=0;i<=5;i++)
    { cin>>s1;
	  cout<<tt.TTsearch(root,s1);
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章