Здесь есть одна проблема
else{
child = root->children[index];
p = find(child, word.substr(1));
}
, которая должна быть
else{
child = root->children[index];
p = find(child, word.substr(1));
return p;
}
Компилятор должен был выдать вам предупреждение о пропущенном операторе возврата. Вы игнорировали это?
Может быть много других проблем с кодом. Как уже было сказано, нужно использовать отладчик . Гораздо быстрее способ исправить ваши ошибки, чем спрашивать на SO.