mirror of
https://hub.njuu.cf/TheAlgorithms/C-Plus-Plus.git
synced 2023-10-11 13:05:55 +08:00
Trie Tree
This commit is contained in:
parent
aead0ba366
commit
cbef5275bb
93
Datastructures/TrieTree.cpp
Normal file
93
Datastructures/TrieTree.cpp
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#include<iostream>
|
||||||
|
#include<string.h>
|
||||||
|
#include<stdbool.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
typedef struct trie
|
||||||
|
{
|
||||||
|
struct trie *arr[26];
|
||||||
|
bool isEndofWord;
|
||||||
|
} trie;
|
||||||
|
|
||||||
|
trie *createNode()
|
||||||
|
{
|
||||||
|
trie *nn = new trie();
|
||||||
|
for (int i = 0; i < 26; i++)
|
||||||
|
nn->arr[i] = NULL;
|
||||||
|
nn->isEndofWord = false;
|
||||||
|
return nn;
|
||||||
|
}
|
||||||
|
|
||||||
|
void insert(trie *root, char* str)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < strlen(str); i++)
|
||||||
|
{
|
||||||
|
int j = str[i] - 'a';
|
||||||
|
if (root->arr[j])
|
||||||
|
{
|
||||||
|
root = root->arr[j];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
root->arr[j] = createNode();
|
||||||
|
root = root->arr[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root->isEndofWord = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool search(trie *root, char* str, int index)
|
||||||
|
{
|
||||||
|
if (index == strlen(str))
|
||||||
|
{
|
||||||
|
if (!root->isEndofWord)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int j = str[index] - 'a';
|
||||||
|
if (!root->arr[j])
|
||||||
|
return false;
|
||||||
|
return search(root->arr[j], str, index + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool deleteString (trie *root, char* str, int index)
|
||||||
|
{
|
||||||
|
if (index == strlen(str))
|
||||||
|
{
|
||||||
|
if (!root->isEndofWord)
|
||||||
|
return false;
|
||||||
|
root->isEndofWord = false;
|
||||||
|
for (int i = 0; i < 26; i++)
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int j = str[index] - 'a';
|
||||||
|
if (!root->arr[j])
|
||||||
|
return false;
|
||||||
|
bool var = deleteString (root, str, index + 1);
|
||||||
|
if (var)
|
||||||
|
{
|
||||||
|
root->arr[j] = NULL;
|
||||||
|
if (root->isEndofWord)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < 26; i++)
|
||||||
|
if (root->arr[i])
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
trie *root = createNode();
|
||||||
|
insert(root, "hello");
|
||||||
|
insert(root, "world");
|
||||||
|
int a = search(root, "hello", 0);
|
||||||
|
int b = search(root, "word", 0);
|
||||||
|
printf("%d %d ", a, b);
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user