PDA

View Full Version : سوال: ساختمان داده و درخت ها در ++C



feri_sharp
دوشنبه 19 دی 1390, 13:14 عصر
سلام دوستان.
کد زیر کد یک کلاس برای درخت.
class treeNode;
class tree
{
public:
void inorder();
void postorder();
void preorder();
private:
treeNode *root;
};
class treeNode
{
friend class tree;
private:
int data;
treeNode *rightchild,*leftchild;
};
و تابع inorder :
void tree::inorder()
{
inorder(root);
}
void tree:inorder(treeNode *CurrentNode)
{
if(Currentnode)
{
inorder(CurrentNode->leftchild);
cout<<CurrentNode->data;
inorder(CurrentNode->rightchild);
}
}

خوب حالا سوا من اینه که ما اینجا توی تابع main چجوری باید اینا رو فراخونی کنیم؟ منظورم اینه که آخه این کلاس درخت هیچ ورودی ای نمی گیره که ما اول بهش یه درخت بدیم تا با inorder پیمایشش کنیم!!!!!!!

ممنون.
موفق باشید.

feri_sharp
دوشنبه 19 دی 1390, 15:38 عصر
دوستان اگر میشه، زود بهم جواب بدین یه سرنخ کوچیکم کافیه. من فردا امتحان ساختمان داده دارم.

aram_2
دوشنبه 19 دی 1390, 15:41 عصر
دوست عزیز این بصورت بازگشتی برای شما عمل می کنه.بعد شما کد کامل رو بذارید.چون هر نود باید سه تا عضو داشته باشه یکی داده یکی فرزند سمت چپ و دیگری سمت راست

feri_sharp
دوشنبه 19 دی 1390, 16:07 عصر
من فقط اینجا اینو می خوام بدونم این کلاس که insert نداره ما بتونیم یه درخت بهش بدیم و با inorder پیمایشش کنیم. من فقط می خوام که یکی بهم بگه این تابع insert برای این درخت رو باید جوری بنویسیم؟
بعدشم این کد تقریبا شبیه به کد توی کتاب Horowits هستش اونم کامل نیست و فقط یه شبه کد.!!!!!!!!!!!!!
ممنون.
موفق باشید.

aram_2
دوشنبه 19 دی 1390, 16:33 عصر
خب شما اول یه نمونه از کلاس treeNode بسازید و.اینجا شما نیاز به یه تابع Insert دارید.بعد از اینکه اونو ساختید باید از طریق این تابع که الان میگم چطوره نود یا بهتر بگم زیرشاخه رو به درخت اضافه کنید.این تابع شما باید سه تا آرگومان بگیره یکی داده و دو تا دیگه زیرشاخه های درخت.برای برگ این ارگومان ها رو null بدید.البته یه آرگومان دیگه هم میخواد برای اینکه بگید این مقادیر رو تو کدوم نود میخواید وارد کنید.اما تابع :
خوب

void tree:insert(treeNode *node,treeNode *left,treeNode *right,int data)
{
if(node==null)
{

root-> rightchild=right;
root-> leftchild=left;
root-> data=data;

}
else
{
node-> rightchild=right;
node-> leftchild=left;
node-> data=data;
}
}

feri_sharp
دوشنبه 19 دی 1390, 17:02 عصر
ممنون دوست عزیز.
یه سوال دیگه اینکه تابع Constructor رو باید براش بنوسیم که root=0 ؟

aram_2
دوشنبه 19 دی 1390, 21:20 عصر
بله سازنده هم باید بنویسید و روت رو بسازید