اتساع أول مباراة ضد المتسابقين في شجرة الأشجار في جافاسكريبت

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

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

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

بناء عقدة بسيطة وفئة شجرة

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

عند إنشاء فئة شجرة ، نحتاج فقط إلى خاصية للإشارة إلى العقدة الأولى ، والمعروفة أيضًا باسم الجذر.

داخل فئة الشجرة هو المكان الذي نبني فيه وظائف بحث DFS و BFS للبحث من خلال شجرة العقد.

خوارزمية العمق الأول

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

يستخدم DFS مكدس لاجتياز شجرة العقد. سنعلن العقدة الحالية عن طريق إيقاف تشغيل القيمة الأولى للصفيف. باستخدام هذه العقدة ، سوف نتحقق مما إذا كانت بياناتها مساوية للقيمة التي نبحث عنها. إذا كان الأمر متساويًا ، فسنقوم بإرجاع True والخروج من الوظيفة. إذا لم تتطابق قيمة العقدة ، فسوف ندفع أطفال تلك العقدة إلى مقدمة الصفيف إذا كانت موجودة. نحن نغير الأطفال إلى الأمام لأن أسلوب DFS يريدنا أن نذهب إلى أسفل الشجرة قبل التحقق من أي عنصر من عناصر الأخ. إذا لم تتطابق أي قيمة بعد البحث في الشجرة بأكملها ، فسنقوم بإرجاع false في نهاية وظيفتنا.

خوارزمية العرض الأول

بعد بناء وظيفة DFS ، ستبدو وظيفة BFS متشابهة جدًا ، ولكن بفارق صغير واحد. عندما نستخدم نهج BFS ، نريد التحقق من جميع عناصر الأخوة قبل الانتقال إلى الصف التالي من الشجرة. سنقوم بإنجاز هذا باستخدام قائمة انتظار. تتطلب قائمة الانتظار منا استخدام طريقة الدفع بدلاً من طريقة إلغاء الضغط عند التعامل مع الأطفال في العقدة. بدلاً من أخذ أطفال العقدة ووضعها في مقدمة صفيف المجموعات ، سنقوم بدفعها إلى النهاية. هذا يضمن أننا سوف نتحقق من جميع عناصر الأخوة قبل الانتقال إلى الصف التالي من الشجرة.

متى يجب استخدام BFS مقابل DFS؟

يمكن أن تكون كلتا الخوارزميات في متناول يدي عندما تعبر شجرة للبحث عن قيمة ، ولكن أيهما أفضل؟ كل هذا يتوقف على هيكل الشجرة وما تبحث عنه. إذا كنت تعرف أن القيمة التي تبحث عنها أقرب إلى الأعلى ، فقد يكون أسلوب BFS اختيارًا مثاليًا ، ولكن إذا كانت الشجرة واسعة جدًا وليست عميقة جدًا ، فقد يكون نهج DFS أسرع وأكثر كفاءة. فقط ضع في اعتبارك أن هناك العديد من العوامل الأخرى التي ستحتاج إلى تحديدها قبل اختيار الطريقة التي يجب اتخاذها. لدي ثقة أنك سوف معرفة ذلك!