Имам решението на задачата трябва ми обяснение на кода
кой ред какво означава това ме интересува Моля ако знаете помогнете ми трябва ми до 16.01.2011
Задание :
Да се разработи програма, която създава и поддържа честотен речник с думи. речникът да се реализира чрез двоично дърво на търсене с ключ - съответната дума. честотата представлява броя срещания на думата в зададен текст.
програмата трябва да дава възможност на потребителя да:
- добавя нова дума в речника (с начална стойност на брояча за честота 0)
- изтрива дума от речника
- проверява (търси) в речника правописа на думите от зададен текст и актуализира брояча на честотата или извежда подходящо съобщение при сгрешена дума (неоткрита в речника)
-извежда на екрана думите, започващи със зададен низ
- извежда речника на екрана
Код:
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
using namespace std;
struct tree_node //deklarirane na darvoto
{
tree_node* left;
tree_node* right;
string info;
int counter;
};
tree_node* root;
tree_node * T;
void dobaviane(string key, tree_node *ij ) // realizirame dobaviane chrez rekursiq. ako nqma koren // se realizira dolnata funkciq – tam dobavqme koren
{
if(key< ij->info)
{
if(ij->left!=NULL)
dobaviane(key, ij->left); //tuk ima rekursiq nalqvo
else
{
ij->left=new tree_node;
ij->left->info=key;
ij->left->counter=0;
ij->left->left=NULL;
ij->left->right=NULL;
}
}
else if(key>=ij->info)
{
if(ij->right!=NULL)
dobaviane(key, ij->right); // tuk ima rekursiq nadqsno
else
{
ij->right=new tree_node;
ij->right->info=key;
ij->right->counter=0;
ij->right->left=NULL;
ij->right->right=NULL;
}
}
}
void dobaviane(string key) // dobavqne na koren ako nqma nalichen. Ako ima se izpulnqva gornata funkciq
{
if(root!=NULL)
{
dobaviane(key, root);
}
else
{
root=new tree_node;
root->info=key;
root->counter=0;
root->left=NULL;
root->right=NULL;
}
}
void print (string key, tree_node* p) // printira vsichki dumi zapochvashti s niz ‘key’
{
if (p != NULL)
{
print(key, p->left);
size_t found;
found=p->info.find(key);
if (found!=string::npos)
{
cout << p->info; cout << " \n"; //printiranena dumite otgovarqshti na iziskvaniqta
}
print(key, p->right);
}
else return;
}
void print(string key)
{
print(key, root) ;
}
void remove(string d, tree_node* &p) //tazi funkciq e prepisana direktno ot metodi4kite
//sluji za premahwane, kato pyrvo e realizirana maxde,l za da ostane podredeno durvoto
{
void maxdel(tree_node* &T)
{
if (T->right!=NULL) maxdel(T->right);
else {
root->info=T->info;
T=T->left;
}
}
{
if (p!=NULL)
if (d<p->info) remove(d,p->left);
else if (d>p->info) remove(d,p->right);
else
if (p->left==NULL) p=p->right;
else if (p->right=NULL) p=p->left;
else maxdel(p->left);
}