Menu
CoddyTech

Boundary Traversal of Binary Tree

تحتوي المصفوفة root على شجرة ثنائية بترتيب المستويات: الجذر عند الفهرس 0، وابنا الفهرس i عند 2i+1 (الأيسر) و2i+2 (الأيمن)، وتشير القيمة -1 إلى موضع فارغ، وقد توجد قيم -1 إضافية في النهاية. الورقة هي عقدة ليس لها أبناء.

أعِد حدود الشجرة عكس اتجاه عقارب الساعة بدءًا من الجذر:

  1. الجذر.
  2. الحد الأيسر، من الأعلى إلى الأسفل: بدءًا من الابن الأيسر للجذر، انتقل إلى الابن الأيسر إن وُجد، وإلا فإلى الابن الأيمن. توقّف قبل الوصول إلى ورقة.
  3. كل الأوراق، من اليسار إلى اليمين.
  4. الحد الأيمن، من الأسفل إلى الأعلى: وهو صورة معكوسة للحد الأيسر، بدءًا من الابن الأيمن للجذر.

لا تُدرج أي عقدة مرتين، لذا فإن الشجرة المكوّنة من عقدة واحدة تعطي جذرها فقط.

الدالة

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
الشجرة الثنائية بترتيب المستويات، مع استخدام -1 للدلالة على موضع فارغ
تُرجعinteger-array
القيم الحدّية، عكس اتجاه عقارب الساعة انطلاقًا من الجذر

القيود

  • 1 ≤ root.length ≤ 32767
  • كل root[i] إما -1 أو قيمة تحقق 0 ≤ root[i] ≤ 105.
  • root[0] لا تكون أبدًا -1، لذا تحتوي الشجرة على عقدة واحدة على الأقل.
  • قد تنتهي المصفوفة بعناصر إضافية -1 بعد العقدة الأخيرة.
  • كلا الابنين في الموضع الفارغ فارغان أيضًا، والعمق لا يتجاوز 14.
  • قيم العقد متميزة.

أمثلة

المدخلات
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
المخرجات
[7, 3, 1, 4, 6, 8, 9]
الشرح
بعد الجذر 7، الحد الأيسر هو 3: ابنه 1 ورقة. الأوراق هي 1، 4، 6، 8. الحد الأيمن هو 9، فوق الورقة 8.
challenge icon

سؤال إضافي

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

إعادة ضبط الشيفرة
def boundaryTraversal(root):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

وسيط

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

الإخراج المتوقع

[7, 3, 1, 4, 6, 8, 9]