درخت ها

lighting

Member
سلام
اگه بخواهیم یه برنامه بنویسیم که ساختار درخت دودویی معمولی (نه جست و جو) رو به صورت شی گرا پیاده سازی کنه چه کار باید انجام بدیم؟
مثلا باید یه کلاس برای ساختار هر گره از درخت تعریف کنیم یکی هم برای کل ساختار درخت دودویی؟
 

the_king

مدیرکل انجمن
سلام
اگه بخواهیم یه برنامه بنویسیم که ساختار درخت دودویی معمولی (نه جست و جو) رو به صورت شی گرا پیاده سازی کنه چه کار باید انجام بدیم؟
مثلا باید یه کلاس برای ساختار هر گره از درخت تعریف کنیم یکی هم برای کل ساختار درخت دودویی؟

بله، به گمانم بهترین حالتش همونه که دو کلاس بسازید.
 

lighting

Member
من برای قسمت اول برنامه این طور نوشتم ایا این جوری درسته؟
سه تا هم تابع به نام های postorderEval و preorderEval و inorderEval
برای درخت عبارت ساختم که توی فایل خروجی که بعدا می نویسم پیمایش های postfix,prefix,infix رو چاپ کنه؟
کد:
[LEFT]template <class Type> class BinaryTree;
template <class Type>
class node{
friend class BinaryTree <Type>
private:
node *left;
Type data;
node *right;
};
template <class Type>
class BinaryTree{
private:    
node <Type> *root;
void inorder (node <Type> *T);
void preorder (node <Type> *T);
void postorder (node <Type> *T);
public:     
int insert (const Type x);
int delete (const Type &x);
void inorder ();
void preorder();
void postorder ();
BinaryTree()
{root=null;};
void postorderEval();
void preorderEval();
void inorderEval();[/LEFT]
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ظاهرا مشکلی نداره، اما این مورد رو در نظر بگیرید که کلاس BinaryTree مسئول مدیریت حافظه درخت ئه،
کدی که از کلاس استفاده می کنه نباید برای پاک کردن کل درخت به زحمت بیافته، اینکار وظیفه خود کلاسه.
بهتره که یک متد (نابود کننده) Destructor به کلاس اضافه کنید که اگه root برابر null نیست، دونه دونه عضو ها شو
Delete کنه و حافظه ای که برای اعضاء درخت تخصیص داده شده آزاد بشه. چه بهتر که اینکار توسط یک متد Public
انجام بشه تا کاربر هم بتونه از اون متد فرضا Clear استفاده کنه.
 

lighting

Member
برای قسمت پیمایش هاش این طوری نوشتم درسته؟
سه تاشون تقریبا شبیه هم بودن فقط جاهاشون عوض می شدن برای همین یکی شون رو نوشتم

کد:
[LEFT]void BinaryTree ::inorder (node<Type> *T)
{
if (T==null)return;
inorder (T--->left);
cout<< T--->data<<"";
inorder (T---->right);}[/LEFT]
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا