University Logo

جامعة حمص - كلية الهندسة المعلوماتية

الأشجار الثنائية

المحاضرة الرابعة عشر - خوارزميات وبنى معطيات 1

إعداد: د. ناديا خرسان
العام الدراسي: 2023-2024
المادة: خوارزميات وبنى معطيات 1
التعريف والمفاهيم
الخصائص الرياضية
أنواع الأشجار
تمثيل الأشجار
النظريات المهمة

تعريف الأشجار الثنائية

الشجرة الثنائية هي مجموعة منتهية من العقد، إما أن تكون خالية أو مكونة من:

  • عقدة الجذر (Root Node)
  • شجرة فرعية يسارية (Left Subtree)
  • شجرة فرعية يمينية (Right Subtree)

التمثيل الرياضي

نسمي البنية B شجرة ثنائية إذا تحقق أحد الشرطين:

B = ∅ (الشجرة فارغة)

أو

B = (الجذر, B1, B2)

حيث B1 هي الشجرة الفرعية اليسارية و B2 هي الشجرة الفرعية اليمينية.

المصطلحات الأساسية

الجذر (Root): العقدة الأعلى في الشجرة
العقدة الورقية (Leaf): عقدة بدون أبناء
العقدة الداخلية (Internal Node): عقدة لها على الأقل ابن واحد
الارتفاع (Height): أطول مسار من الجذر إلى الورقة

الخصائص الرياضية للأشجار الثنائية

الحد الأقصى لعدد العقد

الحد الأقصى لعدد العقد في المستوى L: 2L
المستوى 0: 20 = 1 عقدة
المستوى 1: 21 = 2 عقدة
المستوى 2: 22 = 4 عقدة
المستوى 3: 23 = 8 عقدة

العدد الكلي للعقد

الحد الأقصى لعدد العقد في شجرة ارتفاعها h: ∑k=0h 2k = 2h+1 - 1

مثال: إذا كان ارتفاع الشجرة (h) = 3

العدد الأقصى للعقد = 24 - 1 = 16 - 1 = 15 عقدة

العلاقة بين العقد الورقية والعقد الداخلية

n0 = n2 + 1

حيث:

البرهان:

لنفرض أن n حجم الشجرة، و n1 عدد العقد من الدرجة 1

n = n0 + n1 + n2 ... (1)

عدد الحواف في الشجرة b = n - 1

لكل عقدة من الدرجة 2 تساهم بحافتين، ومن الدرجة 1 بحافة واحدة:

n - 1 = n1 + 2n2 ... (2)

بالتعويض من (1) و (2) نصل إلى: n0 = n2 + 1

أنواع الأشجار الثنائية الخاصة

الشجرة الثنائية الخطية

كل عقدة لها على الأكثر ولد واحد

الشجرة الثنائية الممتلئة

كل عقدة لها إما صفر أو ولدين بالضبط

الشجرة الثنائية الكاملة

جميع المستويات ممتلئة إلا الأخير، والفراغات من جهة اليمين

الشجرة الثنائية التامة

جميع المستويات ممتلئة تمامًا بالعقد

n = 2h+1 - 1

مقارنة بين الأنواع

النوع الوصف الاستخدامات
خطية تتحول إلى قائمة مرتبطة تمثيل التسلسلات الخطية
ممتلئة لا توجد عقدة بولد واحد فقط خوارزميات الضغط والتشفير
كاملة الفراغات في المستوى الأخير من اليمين فقط بنى الكومة (Heaps)
تامة جميع العقد الورقية بنفس المستوى الأنظمة المتوازنة، أشجار القرار

تمثيل الأشجار الثنائية

1. التمثيل باستخدام المصفوفات

نستخدم مصفوفة بأحجام 2h+1 - 1 حيث h ارتفاع الشجرة

قواعد التخزين:

الجذر عند الفهرس 1
الابن الأيسر للعقدة i: 2i
الابن الأيمن للعقدة i: 2i + 1
الأب للعقدة i: ⌊i/2⌋

مثال:

// مثال كود لإنشاء شجرة باستخدام المصفوفات

#define

MAX_SIZE

15

char

tree[

MAX_SIZE

];


// تعيين الجذر

tree[1] =

'A'

;


// تعيين الأبناء

tree[2] =

'B'

; // الابن الأيسر لـ A

tree[3] =

'C'

; // الابن الأيمن لـ A

2. التمثيل باستخدام القوائم المترابطة

كل عقدة تمثل ككائن يحتوي على:

  • البيانات (data)
  • مؤشر إلى الابن الأيسر (left)
  • مؤشر إلى الابن الأيمن (right)

struct

Node {

    

int

data;

    

struct

Node* left;

    

struct

Node* right;

};


typedef struct

Node* BTree;


// إنشاء عقدة جديدة

struct

Node* createNode(

int

data) {

    

struct

Node* node = (

struct

Node*)

malloc

(

sizeof

(

struct

Node));

    node->data = data;

    node->left =

NULL

;

    node->right =

NULL

;

    

return

node;

}

مقارنة بين طرق التمثيل

المعيار المصفوفات القوائم المترابطة
الكفاءة في الذاكرة منخفضة للأشجار غير الكاملة عالية (تستخدم الذاكرة حسب الحاجة)
سرعة الوصول O(1) للوصول العشوائي O(n) للوصول العشوائي
إضافة/حذف العقد معقد ويتطلب إعادة تنظيم سهل وسريع (O(1))
الاستخدام الأمثل الأشجار الكاملة والتامة جميع أنواع الأشجار

النظريات المهمة

النظرية الأولى: حدود الارتفاع

لشجرة ثنائية حجمها n وارتفاعها h: ⌊log₂(n)⌋ ≤ h ≤ n - 1

حيث ⌊x⌋ هو أكبر عدد صحيح ≤ x

النظرية الثانية: حد العقد من الدرجة الثانية

في شجرة ثنائية غير فارغة حجمها n: n₂ ≤ (n - 1)/2

حيث n₂ هو عدد العقد التي لها ولدان

النظرية الثالثة: العلاقة بين الأوراق والارتفاع

لشجرة ثنائية غير فارغة بعدد أوراق f وارتفاع h: h ≥ ⌈log₂(f)⌉

حيث ⌈x⌉ هو أصغر عدد صحيح ≥ x

تطبيقات عملية للنظريات

تحليل كفاءة خوارزميات البحث في الأشجار
ضمان توازن الأشجار لتحسين الأداء
تقييم متطلبات الذاكرة للتمثيلات المختلفة

مخطط العلاقة بين حجم الشجرة وارتفاعها