الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[ تمت الإجابة ]أريد شرح لعمل بعض الدوال في Binary Tree

بدأه Mr.jamss في 15 ديسمبر 2012 · 3 رد · 2,044 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ..

ارغب بالشرح المفصل لعمل هذا الكود



node *insert(node *tree,int ele)
{
if(tree==NULL)
{
tree=new node;
tree->left=tree->right=NULL;
tree->data=ele;

}
else
if(rand()%2==0)
tree->left=insert(tree->left,ele);
else
tree->right=insert(tree->right,ele);
return(tree);
}

اريد التركيز على الكود

 if(rand()%2==0)

كذلك ما فائدة التغليف للدوال كالاتي ..

الفنكشن



void printPreOrder(TreeNode *new_ptr){

if(new_ptr!=NULL)
{
cout<<new_ptr->data<<endl;
printPreOrder(new_ptr->left);
printPreOrder(new_ptr->right);

}
}

التغليف



void printPreOrder(){printPreOrder(root);}



تم تعديل هذه المشاركة بواسطة Mr.jamss في 15 ديسمبر 2012 في 04:40

#2

الدالة insert تستقبل مؤشر من نوع node يُمثل الشجرة الثنائية و متغير صحيح يُمثل العدد المُراد إضافته.

إذا كانت الشجرة فارغة ستتم تهيئة المؤشر السابق (previous pointer) و المؤشر اللاحق (next pointer) بالقيمة NULL بالإضافة إلى إسناد قيمة ele للمتغير data الموجود في الشجرة.

في الحالة المُعاكسة, لدينا حالتين :

  • إذا تم توليد رقم عشوائي زوجي ستتم إضافة العنصر على يسار الشجرة.
  • و إلا فستتم إضافة العنصر على يمين الشجرة.

في نهاية المطاف, ستتم إعادة المؤشر tree الذي يُشير إلى الشجرة بعد إجراء عملية الإضافة.

تم تعديل هذه المشاركة بواسطة Sn@CkeR في 15 ديسمبر 2012 في 17:21 — السبب: تنسيق المشاركة

1
#3

شكراً لك أخي Sn@CkeR على التوضيح وصلت الفكرة ..

لكن ماذا عن التغليف ؟

#4

أخي الكريم .. أظن أن هذا التابع ليس تغليفاً .. بل هو تحميل زائد للتابع PrintPreOrder ...

أي أن هذا التابع يمكنك استدعاؤه بإعطاء عقدة جديدة كوسيط :

void printPreOrder(TreeNode *new_ptr)

أو يمكنك استدعاؤه بدون وسيط .. وعندئذ سيُستدعى التابع التالي :

void printPreOrder()

والذي سيقوم بدوره باستدعاء التابع الأول ويعطيه وسيط هو جذر الشجرة ..

وبذلك .. يمكنك طباعة قيمة الجذر ..دون تمرير الجذر كوسيط ..

بعبارة أخرى .. التابع له شكلان .. إما أن تمرر له وسيط .. وعندها سيطبع قيمة الوسيط .. وإما أن تستدعيه بدون وسيط .. عندئذ سيطبع قيمة الجذر ...

بالتوفيق

مواضيع مشابهة