نشاط برمجي: تمثيل شجري من خلال المعرف فقط ؟

قد يحتاج المبرمج إلى استخدام التمثيل الشجري أو الهرمي في بعض برامجه ولهذا وجدت عناصر واجهة لتمثيل ذلك.

المألوف في استخدام جداول قواعد المعطيات لتمثيل النظام الشجري لأسطرها هو تشكيل عمود يمثل معرف الأب وعمل علاقة واحد إلى متعدد بحيث يشير الجدول لنفسه والربط بين معرف الأب إلى المعرف

حتى أن هناك بعض العناصر المرئية المتقدمة تقبل مصدر البيانات من الجدول مباشرة مع تحديد حقل المعرف وحقل معرف الأب وهي تتولى إظهار الشجرة

اليوم كنت أعمل على نفس المسألة مع فارق بسيط وهو أن الجدول لدي ذو شكل بسيط وهو عبارة عن معرف فقط مع اسم لكني أحتاجه بالتمثيل الشجري أي لا يوجد حقل معرف الأب لربطه بالمعرف

بالنسبة لي أنهيته حتى لا يُظن أني أسأل طالبا إجابة لنفسي، وإنما بعد انتهائي خطر لي أن أطرحه كنوع من الترفيه والتنشيط الذهني والتفكير البرمجي والخوارزمي.

السؤال هو كيف يمكنني تمثيل شجري من خلال جدول بسيط عبارة عن معرف وبقية معلومات أي بدون عمل علاقة

قد تكون سهلة لأنها مستخدمة في إحدى المجالات

ولكن السؤال عمل دالة بأي لغة كانت أو حتى بشكل خوارزمية نمرر لها سطر من الجدول فيعيد لنا أبناؤه ودالة أخرى تعيد لنا أبوه ؟


الحل مًستوحى من طريقة ترتيب العناصر الرقمية في Microsoft word و غيرها. المعرف طريقته معرّف الابن="<معرّف الأب>.<رقم الابن>" مفصولا بنقطة. لو الأب معرّفه "1.2.4" فإن أول ابن رقمه "1.2.4.1" (اقرأ المعرّف من اليسار لليمين :))

الخوارزمية كالتالي لجدول data و المعرف id لابن CHILD_ID:

get_parent() { 
// استخرج <معرّف الأب> كـ PARENT_ID و ابحث عنه في قاعدة البيانات
    return "SELECT * from data where id = {PARENT_ID}; 
}


get_children() {
// ابحث عن المعرّفات التي تبدأ بـ CHILD_ID متبوعة بنقطة
    return "SELECT * from data where id LIKE '{CHILD_ID}.%"); 
}

أنت افترضت أن المعرف هو نص وحينها كلامك صحيح مع أننا بإمكاننا الاستغناء عن الفصل بالنقطة بافتراض فواصل وهمية تعتمد على أمر آخر إن كان المعرف نص و يمكن كذلك إن كان صحيحا لكن مع بعض الشروط