字典树算法
?這里演示關(guān)于字典樹的插入刪除 查找
字典樹的每個節(jié)點(diǎn)有26個子節(jié)點(diǎn)分別對應(yīng)26個英文字母 ;每個節(jié)點(diǎn)還有個屬性表示該節(jié)點(diǎn)是否為一個單詞(從根節(jié)點(diǎn)到蓋子節(jié)點(diǎn))
參考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);//函數(shù)聲明
bool selectstr(char *str);
void delstr(char* str);
int main()
{insertchar("abc");insertchar("ab");delstr("ab");cout<<selectstr("abc");getchar();
}
void insertchar(char* str)
{//獲取根節(jié)點(diǎn)Trie *head = &root;while(*str){int index = *str-'a';//使用NULL檢驗(yàn)是否存在該字符 if(head->next[index]==NULL) //表示不存在該字符head->next[index]=new Trie();//不存在則實(shí)例化該對象,并返回地址str++; //指針運(yùn)算 檢驗(yàn)下一字符串cout<<*str; head = head->next[index]; //變?yōu)橄乱还?jié)點(diǎn) }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;
}
轉(zhuǎn)載于:https://www.cnblogs.com/Small-Life/p/4007428.html
總結(jié)
- 上一篇: 摩尔庄园餐厅豪华值怎么到20050?
- 下一篇: Minimum Path Sum