const int char_size = 26;
struct charTreeNode {
int check;
charTreeNode* children[char_size];
charTreeNode() {
check = 0;
for (int i = 0; i < char_size ; i++) {
children[i] = NULL;
}
}
};
struct charTree {
charTreeNode* root = new charTreeNode();
void insertNode(string s) {
int l = s.length();
charTreeNode* node = root;
for (int i = 0; i < l; i++) {
int c = s[i] - 'a';
if (node -> children[c] == NULL) node -> children[c] = new charTreeNode();
node = node -> children[c];
}
node -> check = 1;
}
string searchTree(string s) {
int l = s.length();
string ans = "";
charTreeNode* node = root;
for (int i = 0; i < l; i++) {
int c = s[i] - 'a';
ans += s[i];
if (node == NULL || node -> children[c] == NULL) return s;
node = node -> children[c];
if (node -> check == 1) return ans;
}
return s;
}
};