PDA

View Full Version : نحوه پیاده سازی درخت برای یک دیکشنری



pc_math
سه شنبه 16 بهمن 1386, 02:05 صبح
سلام. من می خواهم با استفاده از درخت برای دیکشنری یک برنامه بنویسم ولی نحوه پیاده سازی درخت را بلد نیستم. می خواستم کمکم کنید.البته خودم یک چیزهایی نوشتم ولی جواب نمی دهد.
class Node {
friend tree;
private:
char word[20], mean[20];
Node *right, *left;
public:
Node();
Node(char word[], char mean[]);
};
// ********
Node :: Node(){
word[] =" ";
mean[] =" ";
right = left = 0;
}
// ********
Node :: Node(char w[], char m[]){
strcpy(word, w);
strcpy(mean, m);
right = left = 0;
}
/// ************
class Tree {
private:
Node *root;
void Inorder(Node *t);
public:
void Inorder();
void add(char w[], char m[]);
Tree();
bool update(char w[], char m[]);
bool search(char w[]);
};
// ********
void Tree :: Inorder(){
Inorder(root);
}
:ناراحت::افسرده:

MRHagh
چهارشنبه 17 بهمن 1386, 11:25 صبح
برای دیکشنری معمولا از درخت جستجوی دودوئی (BST) استفاده میشود . در این نوع درخت ، عناصری که کوچکتر از ریشه هستند ، فرزند چپ و عناصری که بزرگتر از ریشه هستند ، فرزند راست ریشه خواهند شد . بدیهی است عنصر تکراری در درخت موجود نخواهد بود . کد زیر نمونه ابتدائی یک درخت جستجو هست که حتما برای طراحی یک دیکشنری باید بیشتر روش کار بشه .


class Node
{
char *word;
char *mean;
public:
Node *Lchild;
Node *Rchild;
Node(char *w="", char *m="")
{
strcpy(word,w);
strcpy(mean,m);
Lchild=0;
Rchild=0;
}
void link (Node *prvnode, Node *newnode) //گره قبلی را به گره جدید در حال ساخت با شروط زیر پیوند میزند
{
if (strcmp(prvnode.getword(), word)<0) // اگر کلمه جدید کوچکتر از قبلی باشد
prvnode.Lchild=newnde;
else if ( strcmp(prvnode.getword(), word)<0) // اگر کلمه جدید بزرگتر از کلمه قبلی باشد
prvnode.Rchild=newnde;
else
cout<<"Entery word is repetitive";
}
char* getword()
{
return word;
}
char* getmean()
{
return mean;
}
} *root=0; // است NULL ریشه درخت که در ابتدا
Node *curnode, // گره ای که در حال حاضر روی آن کار میکنیم
*prvnode, // گره قبلی
*newnode; // گره جدیدی که ساخته میشود
void main ()
{
.
.
.
}
برای جستجوش هم باید توابعی ، خارج از کلاس تعریف کنید تا از ریشه و با توجه به فرزندان چپ و راست ، درت را جستجو کنند .

pc_math
پنج شنبه 18 بهمن 1386, 16:40 عصر
ممنون خیلی کمک کردید