写一段 trie树代码
时间: 2023-09-07 19:04:04 浏览: 108
### 回答1:
这是一段基于 Python 的 trie 树的代码:
```
class TrieNode:
def __init__(self):
self.children = {}
self.is_word = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
node = self.root
for char in word:
if char not in node.children:
node.children[char] = TrieNode()
node = node.children[char]
node.is_word = True
def search(self, word):
node = self.root
for char in word:
if char not in node.children:
return False
node = node.children[char]
return node.is_word
def starts_with(self, prefix):
node = self.root
for char in prefix:
if char not in node.children:
return False
node = node.children[char]
return True
```
这个 trie 树的实现包含了三个操作:插入单词,搜索单词以及搜索前缀。
### 回答2:
Trie树,也称为字典树或前缀树,是一种特殊的树数据结构,通常用于快速检索和存储字符串集合。下面是一个用Python编写的Trie树的基本代码:
```python
class TrieNode:
def __init__(self):
self.children = {}
self.is_end_of_word = False
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word):
current_node = self.root
for char in word:
if char not in current_node.children:
current_node.children[char] = TrieNode()
current_node = current_node.children[char]
current_node.is_end_of_word = True
def search(self, word):
current_node = self.root
for char in word:
if char not in current_node.children:
return False
current_node = current_node.children[char]
return current_node.is_end_of_word
def starts_with(self, prefix):
current_node = self.root
for char in prefix:
if char not in current_node.children:
return False
current_node = current_node.children[char]
return True
```
上述代码中,`TrieNode`类表示Trie树的节点。每个节点包含一个子节点字典和一个布尔值`is_end_of_word`,用于标记是否是一个单词的结尾。
`Trie`类包含了Trie树的基本操作。其中`insert`方法用于向Trie树中插入一个单词,`search`方法用于查找一个单词是否存在,`starts_with`方法用于检查一个前缀是否存在。
这段代码实现了一个简单的Trie树,可以用于处理一些与字符串相关的问题,如单词的插入、查找和前缀匹配等操作。需要注意的是,上述代码只是Trie树的基本实现,仍有许多优化和扩展的空间,如节点压缩、前缀搜索等。
### 回答3:
Trie树,也被称为字典树或前缀树,是一种常用的数据结构,用于存储和搜索字符串集合。下面是一个简单的Trie树代码示例:
```python
class TrieNode:
def __init__(self):
self.children = {} # 子节点集合
self.is_word = False # 标记是否为一个完整的单词
class Trie:
def __init__(self):
self.root = TrieNode() # 初始化根节点
def insert(self, word):
node = self.root # 从根节点开始
for char in word:
if char not in node.children:
node.children[char] = TrieNode() # 如果字符不在子节点集合中,则添加一个新节点
node = node.children[char] # 继续处理下一个字符
node.is_word = True # 标记最后一个节点为一个完整的单词
def search(self, word):
node = self.root
for char in word:
if char not in node.children:
return False # 如果字符在任何节点中都不存在,则单词不存在
node = node.children[char]
return node.is_word # 判断最后一个节点是否为一个完整的单词
def startsWith(self, prefix):
node = self.root
for char in prefix:
if char not in node.children:
return False # 如果字符在任何节点中都不存在,则前缀不存在
node = node.children[char]
return True # 返回True,表示存在以该前缀开头的单词
```
这段代码定义了两个类:`TrieNode`表示一个Trie树的节点,包含子节点集合和标记是否为一个完整的单词;`Trie`表示Trie树,其中的方法包括`insert`插入一个单词,`search`搜索是否存在一个单词,以及`startsWith`判断是否存在以某个前缀开头的单词。
这个Trie树代码示例可以用于构建和查询字符串集合。通过不断向Trie树插入单词,可以将它们按字符顺序分解成树状结构,通过遍历节点来搜索和判断单词是否存在。
阅读全文