鍵樹

鍵樹的定義

鍵樹聽起來高端,其實(shí)也沒有想象中的那么膩害呛每,他其實(shí)就像字典一樣踩窖,有個根root,然后根下面有你存放的字母晨横,字母下面還有字母洋腮,就像查字典的過程,例如下圖手形,我查CAO啥供,先查C,然后查叁幢,最后查O,下面有個$標(biāo)識符坪稽,標(biāo)志這個單詞結(jié)束了曼玩。

鍵樹示例圖

鍵樹代碼的實(shí)現(xiàn)

鍵樹的主要構(gòu)成是next節(jié)點(diǎn)集合 和 標(biāo)識符鳞骤。每次查詢相當(dāng)于多叉樹,找到最后標(biāo)識符截止黍判。代碼是借鑒書本的豫尽,使用次數(shù)不多,不熟練顷帖,如有不當(dāng)之處美旧,希望指正。代碼也放在了github

代碼主要分幾個部分贬墩,Trie樹的插入榴嗅,銷毀,查找陶舞。
其中插入部分的代碼:先獲取root根節(jié)點(diǎn)嗽测,開始逐個遍歷傳入的單詞每個字母,如果該字母在這個節(jié)點(diǎn)的next數(shù)組中已經(jīng)存在肿孵,則向下移動location = location->next[word-'a'];*唠粥,如果不存在,則傳建一個節(jié)點(diǎn)停做,添加到next數(shù)組中晤愧。
下面是查找部分:和插入部分類似,不停的遍歷蛉腌,遍歷出來以后檢查location是不是空官份,且是不是遍歷到了結(jié)尾。

//
//  main.cpp
//  Page276_Trie樹
//
//  Created by 李林 on 2017/2/8.
//  Copyright ? 2017年 lee. All rights reserved.
//

#include <iostream>
using namespace std;

const int branchNum = 26;
/*
 Trie樹:節(jié)點(diǎn)中不設(shè)數(shù)據(jù)域
 每個節(jié)點(diǎn)有個標(biāo)志位表示是否是一個字符串(到字符串的末尾)
 每個節(jié)點(diǎn)保存其子女的節(jié)點(diǎn)指針
 */
struct Trie_node{
    bool isStr;                 // 記錄此處是否構(gòu)成一個串
    Trie_node *next[branchNum]; // 指向各個子樹的指針
    Trie_node() : isStr(false) {
        memset(next, NULL, sizeof(next));
    }
};

class Trie{
public:
    Trie(){
        root = new Trie_node();
    }
    
    void insert(const char* word){
        Trie_node *location = root;
        while(*word){
            if(location->next[*word-'a'] == NULL){  // 不存在則新建立一個節(jié)點(diǎn)
                Trie_node *temp = new Trie_node();
                location->next[*word-'a'] = temp;
            }
            location = location->next[*word-'a'];   // 指針向下移動
            word++;
        }
        location->isStr = true;                     // 到達(dá)底部眉抬,標(biāo)記為一個串
    }
    
    bool search(char* word){
        Trie_node *location = root;
        while(*word && location){
            location = location->next[*word-'a'];
            word++;
        }
        return (location != NULL && location->isStr);
    }
    
    void deleteTrie(Trie_node *root){
        for(int i=0; i<branchNum; i++){
            if(root->next[i] != NULL)
                deleteTrie(root->next[i]);
        }
        delete root;
    }
    
    Trie_node* getTrie(){
        return root;
    }
    
private:
    Trie_node *root;
};

int main(int argc, const char * argv[]) {
    
    Trie tree;
    tree.insert("hello");
    tree.insert("world");
    bool result = tree.search("world");
    printf("%d", result); 
    
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贯吓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蜀变,更是在濱河造成了極大的恐慌悄谐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库北,死亡現(xiàn)場離奇詭異爬舰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寒瓦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門情屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人杂腰,你說我怎么就攤上這事垃你。” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵惜颇,是天一觀的道長皆刺。 經(jīng)常有香客問我,道長凌摄,這世上最難降的妖魔是什么羡蛾? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮锨亏,結(jié)果婚禮上痴怨,老公的妹妹穿的比我還像新娘。我一直安慰自己器予,他們只是感情好浪藻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劣摇,像睡著了一般珠移。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上末融,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天钧惧,我揣著相機(jī)與錄音,去河邊找鬼勾习。 笑死浓瞪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的巧婶。 我是一名探鬼主播乾颁,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艺栈!你這毒婦竟也來了英岭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤湿右,失蹤者是張志新(化名)和其女友劉穎诅妹,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毅人,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吭狡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丈莺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片划煮。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缔俄,靈堂內(nèi)的尸體忽然破棺而出弛秋,到底是詐尸還是另有隱情器躏,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布蟹略,位于F島的核電站邀桑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏科乎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一贼急、第九天 我趴在偏房一處隱蔽的房頂上張望茅茂。 院中可真熱鬧,春花似錦太抓、人聲如沸空闲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碴倾。三九已至,卻和暖如春掉丽,著一層夾襖步出監(jiān)牢的瞬間跌榔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工捶障, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僧须,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓项炼,卻偏偏與公主長得像担平,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锭部,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容