trie樹,又稱字典樹或字首樹,是一種有序的、用於統計、排序和儲存字串的資料結構,它與二叉查詢樹不同,關鍵字不是直接儲存在節點中,而是由節點在書中的位置決定。
乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所對應的鍵才有相關的值。
trie樹的最大優點就是利用字串的公共字首來減少儲存空間與查詢時間,從而最大限度地減少無謂的字串比較,是非常高效的字串查詢資料結構。
#include
#define trie_max_char_num 26
//定義trienode
struct trienode}}
;//trienode的前序遍歷
void
preorder_trie
(trienode* node,
int layer)
printf
("%c"
, i+
'a');if
(node-
>child[i]
->is_end)
printf
("\n");
preorder_trie
(node-
>child[i]
, layer +1)
;}}}
intmain()
執行結果為:
a
---b
------c
(end)
----
-----d
(end)
------d
(end)
b(end)
---c
------d
(end)e--
-f--
----
g(end)
對trie樹的整體測試
#include
#include
#define max_trie_char_num 26
struct trienode}}
;void
get_all_word_from_trie
(trienode* node, std::string& word, std::vector
& wordlist)
get_all_word_from_trie
(node-
>child[i]
, word, wordlist)
; word.
erase
(word.
length()
-1,1
);}}
}void
preorder_trie
(trienode* node,
int layer)
printf
("%c"
, i +
'a');if
(node-
>child[i]
->is_end)
printf
("\n");
preorder_trie
(node-
>child[i]
, layer +1)
;}}}
class
trietree
~trietree()
} trienode _root;
void
insert
(const
char
* word)
ptr = ptr-
>child[pos]
; word++;}
ptr-
>is_end =
true;}
bool
search
(const
char
* word)
ptr = ptr-
>child[pos]
; word++;}
return ptr-
>is_end;
}bool
startswith
(const
char
* prefix)
ptr = ptr-
>child[pos]
; prefix++;}
return
true;}
private
: trienode*
new_node()
std::vector> _node_vec;};
intmain()
printf
("\n");
printf
("search:\n");
printf
("abc: %d\n"
,trie_tree.
search
("abc"))
;printf
("abcd: %d\n"
,trie_tree.
search
("abcd"))
;printf
("bc: %d\n"
,trie_tree.
search
("bc"))
;printf
("b: %d\n"
,trie_tree.
search
("b"))
;printf
("\n");
printf
("ab: %d\n"
, trie_tree.
startswith
("ab"))
;printf
("abc: %d\n"
, trie_tree.
startswith
("abc"))
;printf
("bc: %d\n"
, trie_tree.
startswith
("bc"))
;printf
("fg: %d\n"
, trie_tree.
startswith
("fg"))
;return0;
}
執行結果:
preorder_trie:a--
- b--
----
c(end)
----
-----d
(end)
------d
(end)
b(end)
--- c
------d
(end)e--
- f--
----
g(end)
all words :
abcabcd
abdb
bcdefg
search :
abc:
1abcd :
1bc :
0b :
1ab :
1abc :
1bc :
1fg :
0
資料結構 TRIE樹
分類 data structure 2009 04 19 22 31 5425人閱讀收藏 舉報trie樹 trie樹就是字元樹,其核心思想就是空間換時間。舉個簡單的例子。給你100000個長度不超過10的單詞。對於每乙個單詞,我們要判斷他出沒出現過,如果出現了,第一次出現第幾個位置。這題當然可以用h...
資料結構 TRIE樹
trie樹 trie樹就是字元樹,其核心思想就是空間換時間。舉個簡單的例子。給你100000個長度不超過10的單詞。對於每乙個單詞,我們要判斷他出沒出現過,如果出現了,第一次出現第幾個位置。這題當然可以用hash來,但是我要介紹的是trie樹。在某些方面它的用途更大。比如說對於某乙個單詞,我要詢問它...
資料結構之Trie樹
1 什麼是trie樹 trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公...