用二叉树建立Tire树C++
时间: 2024-02-04 18:23:55 浏览: 77
二叉树可以用来构建Trie树(字典树),下面是一个示例代码片段,演示了如何使用二叉树来实现Trie树的基本功能:
```cpp
#include <iostream>
using namespace std;
// Trie树节点
struct TrieNode {
TrieNode* left; // 左子节点表示0
TrieNode* right; // 右子节点表示1
bool isEndOfWord; // 表示当前节点是否为单词的结尾
TrieNode() {
left = nullptr;
right = nullptr;
isEndOfWord = false;
}
};
// 在Trie树中插入一个单词
void insert(TrieNode* root, string word) {
TrieNode* curr = root;
for (char c : word) {
if (c == '0') {
if (!curr->left) {
curr->left = new TrieNode();
}
curr = curr->left;
} else {
if (!curr->right) {
curr->right = new TrieNode();
}
curr = curr->right;
}
}
curr->isEndOfWord = true;
}
// 在Trie树中查找一个单词
bool search(TrieNode* root, string word) {
TrieNode* curr = root;
for (char c : word) {
if (c == '0') {
if (!curr->left) {
return false;
}
curr = curr->left;
} else {
if (!curr->right) {
return false;
}
curr = curr->right;
}
}
return curr->isEndOfWord;
}
int main() {
TrieNode* root = new TrieNode();
// 插入单词
insert(root, "hello");
insert(root, "world");
// 查找单词
cout << search(root, "hello") << endl; // 输出1(存在)
cout << search(root, "world") << endl; // 输出1(存在)
cout << search(root, "hi") << endl; // 输出0(不存在)
return 0;
}
```
在这个示例中,我们使用二叉树来表示Trie树的每个节点。每个节点有两个指针,分别指向左子节点和右子节点。左子节点表示二进制位为0的情况,右子节点表示二进制位为1的情况。`isEndOfWord`字段用来标记当前节点是否为一个单词的结尾。
通过在二叉树上进行插入和查找操作,我们可以实现Trie树的基本功能。在上面的示例中,我们首先插入了两个单词"hello"和"world",然后分别查找了这两个单词,最后查找了一个不存在的单词"hi"。
阅读全文