trie樹(字典樹)

2021-06-22 10:37:50 字數 2324 閱讀 7119

1. trie樹,又名字典樹,顧名思義,它是可以用來作字串查詢的資料結構,它的查詢效率比雜湊表還要高。

trie樹的建樹:

比如有字串」ab」 ,「adb」,「adc」   可以建立字典樹如圖:

樹的根節點head不儲存資訊,它有26個next指標,分別對應著字元a,b,c等。插入字串ab時,next[『a』-『a』]即next[0]為空,這是申請乙個結點放在next[0]的位置,插入字串db時,next[『d』-『a』]即next[3]為空,這時申請乙個結點tmp放在next[3]的位置,接下來,tmp的後向結點tmp->next[『a』-『a』]即tmp->next[0]為空,在申請乙個結點放在tmp->next[0]的位置。  插入字串dc時,檢查head->next[3]不為空,然後檢查tmp->next[2]為空,這時申請乙個結點放在tmp->next[2]的位置。

字典樹的建樹過程就是字串不斷插入的過程。

字典樹的查詢可以按照如下步驟進行:比如查詢字串」dc」,先檢查head->next[3]是否為空,如果為空返回,若不為空,再檢查下個結點的next[2]是否為空,如果為空返回

2. 字典樹的應用

(1)用於查字串的字典樹:

用於查詢字串的字典樹,輸的結點結構體可以定義為:

struct node

;

其中isword用於判斷從根節點到此結點是否構成乙個單詞,next陣列用於指示26個結點指標,這裡假定所有單詞都使用小寫英文本母來表示。

# include # include # include using namespace std;

struct node

;node *head=null;

void insert(char s)

else

p=p->next[s[i]-'a'];

}p->isword=true;

}int find(char *s)

else

return 0;

}return (p!=null&&(*s)=='\0'&&p->isword==true);

}void destroy(node *head)

free(head);}}

int main(void)

;

其中num為這個本字首出現的次數,next陣列表示的含義與上面類似。

# include # include # include using namespace std;

struct node

;node *head=0;

int main()

cout

cout<

else}}

int find(char a)

else }

return count;

}void destroy(node *head)

free(head);

}}

(3)用於字串排序的字典樹

用於字串排序的字典樹,樹的結點結構體可以定義如下:

struct node

;

其中count用於儲存某個字串出現的次數,s用於儲存到本節點為止的字串,next陣列含義與前面的類似。

# include # include # include using namespace std;

int cnt=0;

struct node

;node *head=null;

void insert(char str)

; strcat(tmp->s,ctmp);

p->next[str[i]-'a']=tmp;

p=tmp;

} else

p=p->next[str[i]-'a'];

}p->count++;

}void sort(node *head,char **str)

for(int j=0;j<26;j++)

sort(head->next[j],str); }}

void destroy(node *head)

free(head);}}

int main(void)

; insert(str[0]);

insert(str[1]);

insert(str[2]);

sort(head,str);

cout<

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...

字典樹 Trie樹

字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...

字典樹 trie樹

amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...