字典树算法
?這里演示關于字典樹的插入刪除 查找
字典樹的每個節點有26個子節點分別對應26個英文字母 ;每個節點還有個屬性表示該節點是否為一個單詞(從根節點到蓋子節點)
參考http://www.cnblogs.com/archimedes/p/trie-tree.html
?
#include<iostream>
using namespace std;
struct Trie
{Trie *next[26];bool isword;
}root;
void insertchar(char* str);//函數聲明
bool selectstr(char *str);
void delstr(char* str);
int main()
{insertchar("abc");insertchar("ab");delstr("ab");cout<<selectstr("abc");getchar();
}
void insertchar(char* str)
{//獲取根節點Trie *head = &root;while(*str){int index = *str-'a';//使用NULL檢驗是否存在該字符 if(head->next[index]==NULL) //表示不存在該字符head->next[index]=new Trie();//不存在則實例化該對象,并返回地址str++; //指針運算 檢驗下一字符串cout<<*str; head = head->next[index]; //變為下一節點 }head->isword=true;
}
bool selectstr(char *str)
{Trie *head =&root;while(*str){int index=*str-'a';if(head->next[index]==NULL)return false;str++;head=head->next[index];}if(head->isword)return true;elsereturn false;
}
void delstr(char* str)
{Trie* head=&root;while(*str){int index=*str-'a';if(head->next[index]==NULL)return;str++;head=head->next[index];}if(head->isword)head->isword=false;
}
轉載于:https://www.cnblogs.com/Small-Life/p/4007428.html
總結
- 上一篇: 摩尔庄园餐厅豪华值怎么到20050?
- 下一篇: Minimum Path Sum