模板 Trie樹模板

2021-07-26 08:05:30 字數 1612 閱讀 7049

trie樹

,是一種

樹形結構

,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串

(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。

首先trie樹的根必定是乙個空節點,每一條邊代表了乙個字元,每乙個節點有多種可能,那麼我們可以使用乙個陣列來達到這個目的;

同時,每乙個單詞(字串)的最後乙個字元所指向的節點需要做標記(如上圖的紅色節點),以表示從樹根到現在所遍歷的乙個字串;

那麼上面所說的就可以通過乙個結構體來實現。

int num = 26;  //以26個小寫字母為例

struct trienode

;

然後這個trie就需要插入字串,刪除節點,以及查詢字串,當然,插入字串的函式或者搜尋字串也可以用來刪除某一字串;插入字串,從根節點開始,依次遍歷字串中的每乙個字元,同時也建立新的節點,以達到插入的目的,下面是**的實現:

void insert(trienode* root,const char* word)

now = now->next[*word-'a'];

word++;

} now->istri = true;

}

搜尋字串,也是從根節點開始,依次遍歷,直到樹的最深處或者到達字串的最後乙個字元為止,在這個時候就可以如果到達數的最深處的時候字串仍然沒有遍歷完,或者遍歷完最後乙個字元的時候這個加點未被標記,那麼我們就可以返回false的資訊,表示沒有搜尋到;反之,如果遍歷字串結束之後並且此時的節點被標記(儲存過該字串),則返回true的資訊,當然搜尋這裡還有部分的應用,這裡就不說了。

bool search(trienode* root,const char* word)

} return (now->istri&&now!=null);

}

刪除節點,就是使用遞迴的方式刪除節點,從某一節點開始,依次遍歷其所有節點,又繼續刪除;

void delete(trienode* node)

} delete node;

}

完整**:

#include#include#include#includeusing namespace std;

const int num = 26;

struct trienode

void insert(trienode* root,const char* word)

now = *newnode;

word++;

} now->istri = true;

}bool search(trienode* root,const char* word)

} return (now->istri&&now!=null);

}void delete(trienode* node)

} delete node;

}int main()

字典樹(Trie樹)模板

結構 struct node head 生成節點 動態分配記憶體 node newnode 靜態分配記憶體 node t 1000000 int t 0 node newnode 注意 1 在此之前head一定要先分配,否則無法執行,這裡自己老是出錯。2 還有如果處理多組資料的話一定要注意清空t陣列...

Trie字典樹 模板整理

首先附上學習字典樹參考的部落格鏈結 字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字元 串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊...

trie字典樹 模板題

字典樹是一種實現字串快速檢索的多叉樹結構。每個節點都擁有很多個指標。1 include 2 include 3 using namespace std 4 5 const int n 1e6 5,m 5e5 5 6 7 int trie m 26 tot 0,cnt m 陣列模擬樹,8 cnt i ...