e)
{
//знайдена 1-я буква (tn1- gt; val [0] == insert_value [0])
{= tn1 ;;
}
}
//знайдена 1-я буква
if (tnl!=zero_node/* 1 gt; val [0] == insert_value [0] * /)
{
//прохід на рівні нижче * tn3=left_tree_raise (tnl, insert_value + 1);
//cout lt; lt; «tn3- gt; val:« lt; lt; tn3- gt; val lt; lt; endl; tn3;
}//букви немає
{
//створюємо нову букву (b, insert_value, 1); * tn4=new node (b);// Конструюємо вузол з одного буквой- gt; parent=root;// Реєстрація засновниками у нащадка gt; lstNode.push_back (tn4);// Реєстрація нащадка у батька
//створюємо перше слово в цій букві * tn5=new node (insert_value + 1);// Копіюємо слово без першої літери
tn5- gt; parent=tn4; - gt; lstNode.push_back (tn5); tn5;
}
}
//якщо tn НЕ NULL - помилка (tn)
{ lt; lt; «The global algorithm error, tree node can not be not NULL !!!" lt; lt; tn- gt; val lt; lt; endl;
} NULL;
}
//обхід слід. рівня (ісп. в додавання вузла) * left_tree_raise (node ??* tn, char * insert_val)
{// створюємо покажчик на порожній вузол * tnl=zero_node; b [MAX_STR]=»»;// Буферна переменнаяeach (node ??* tn1 in tn- gt; lstNode)//цикл по елементах списку у вузлі
{// перевіряємо чи збігається частина слова з значенням у вузлі
if ((! strcmp (tn1- gt; val, insert_val)) || (! strncmp (tn1- gt; val, insert_val, strlen (insert_val))) || (! strncmp (tn1- gt; val, insert_val, strlen (tn1- gt; val))))
{
//cout lt; lt; «System A n»;=tn1 ;;
}
}
//якщо покажчик не так на порожній вузол, то дивимося як
//значення у вузлі збігається зі входять значенням
if (tnl!=zero_node)
{// cout lt; lt; «System B n»; (strlen (insert_val) lt; strlen (tnl- gt; val))//якщо залишок слова менше довжини Рядок у вузлі
{// cout lt; lt; «System C n»; (! Strncmp (tnl- gt; val, insert_val, strlen (insert_val)))//якщо збігається частина рядка
{// cout lt; lt; «System D n»; * tn3=new node (tnl- gt; val + strlen (insert_val));// Cоздан новий вузол із залишком значення зі старого узла- gt; parent=tnl; gt; lstNode.push_back (tn3); (tnl- gt; val, insert_val);
return tn3;
}//створюємо новий вузол
{// cout lt; lt; «System F n»; * tn4=new node (insert_val); - gt; parent=tnl; gt; lstNode.push_back (tn4); tn4;
}
} (! strncmp (tnl- gt; val, insert_val, strlen (tnl- gt; val)))//якщо збігається частина рядка, але довжина рядка у вузлі менше довжини вхідної рядка
{// cout lt; lt; «System E n»;
//якщо кінцевий вузол чи ні збігів
//створюємо новий вузол (tnl- gt; lstNode.empty ())//якщо список у вузлі порожній
{// cout lt; lt; «System I n»; * tn2=new node (insert_val + strlen (tnl- gt; val));// Пересуваємося по слову на довжину значення у вузлі і створюємо вузол
tn2- gt; parent=tnl;// Реєструємося gt; lstNode.push_back (tn2); tn2;
}
{// cout lt; lt; «System L n»;
left_tree_raise (tnl, insert_val + strlen (tnl- gt; val));// Пересуваємося по слову на довжину значення у вузлі, рекурсія
}
}
}//якщо на даному рівні немає збігів, то просто створюємо новий вузол
{// cout lt; lt; «System N n»;
* tn6=new node (insert_val);// Створюємо вузол- gt; parent=tn;// Реєструємося gt; lstNode.push_back (tn6);
return tn6;
} tn;// Все зробили, повертаємо покажчик попереднього вузла
} * find_node (char * find_value, node * tn)
{each (node ??* tn1 in tn- gt; lstNode)//цикл по елементах списку
{
if (strlen (find_value) gt; strlen (tn1- gt; val))//якщо довжина шуканого значення більше довжини значення у вузлі
{// cout...