المسارات
/
OCaml
OCaml
/
التمارين
/
شجرة البحث الثنائية
شجرة البحث الثنائية

شجرة البحث الثنائية

سهل

التعليمات

أدرِج الأعداد وابحث عنها في شجرة ثنائية.

عندما نحتاج إلى تمثيل بيانات مرتّبة، لا تكون المصفوفة بنية بيانات جيدة.

لنفترض أن لدينا المصفوفة [1, 3, 4, 5]، وأضفنا إليها 2 فأصبحت [1, 3, 4, 5, 2]. الآن علينا أن نرتّب المصفوفة كاملة من جديد! يمكننا تحسين هذا بإدراك أننا نحتاج فقط إلى إفراغ مكان للعنصر الجديد [1, nil, 3, 4, 5]، ثم إضافة العنصر في المكان الذي أفرغناه. لكن هذا ما زال يتطلب منا إزاحة عناصر كثيرة خطوة واحدة إلى الأسفل.

أما أشجار البحث الثنائية، فيمكنها التعامل مع البيانات المرتّبة بكفاءة أكبر بكثير.

تتكوّن شجرة البحث الثنائية من مجموعة من العقد المتصلة. تحتوي كل عقدة على قطعة من البيانات (مثل العدد 3)، ومتغيّر اسمه left، ومتغيّر اسمه right. ويشير المتغيّران left وright إلى nil، أو إلى عقد أخرى. ولأن هذه العقد الأخرى لها بدورها عقد تحتها، نقول إن المتغيّرين left وright يشيران إلى أشجار فرعية. كل البيانات في الشجرة الفرعية اليسرى أقل من بيانات العقدة الحالية أو تساويها، وكل البيانات في الشجرة الفرعية اليمنى أكبر من بيانات العقدة الحالية.

على سبيل المثال، لو كانت لدينا عقدة تحتوي على البيانات 4، وأضفنا إليها البيانات 2، لبدت شجرتنا هكذا:

رسم بياني بعقدة جذرية قيمتها 4 وعقدة فرعية واحدة قيمتها 2.

      4
     /
    2

وإذا أضفنا بعد ذلك 6، لبدت هكذا:

رسم بياني بعقدة جذرية قيمتها 4 وعقدتين فرعيتين قيمتهما 2 و6.

      4
     / \
    2   6

وإذا أضفنا بعد ذلك 3، لبدت هكذا

رسم بياني بعقدة جذرية قيمتها 4، وعقدتين فرعيتين قيمتهما 2 و6، وعقدة حفيدة قيمتها 3.

       4
     /   \
    2     6
     \
      3

وإذا أضفنا بعد ذلك 1 و5 و7، لبدت هكذا

رسم بياني بعقدة جذرية قيمتها 4، وعقدتين فرعيتين قيمتهما 2 و6، وأربع عقد حفيدة قيمها 1 و3 و5 و7.

          4
        /   \
       /     \
      2       6
     / \     / \
    1   3   5   7

شكر وتقدير

أنشأ habere-et-dispertire هذه الصور باستخدام PGF/TikZ من تأليف Till Tantau.


المصدر

Josh Cheek
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
OCaml Exercism

مستعد لبدء شجرة البحث الثنائية؟

سجّل في Exercism لتتعلّم وتتقن OCaml عبر 60 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.