Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

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

يكون الجذر في العمود 0؛ ويكون الابن الأيسر على بُعد عمود واحد إلى يسار أبيه، والابن الأيمن على بُعد عمود واحد إلى يمينه. أعد قائمة لكل عمود، من اليسار إلى اليمين. داخل كل عمود، رتّب العقد من الأعلى إلى الأسفل، والعقد التي تشترك في العمود والعمق رتّبها تصاعديًا حسب القيمة.

الدالة

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
الشجرة بترتيب الكومة، مع ‎-1‎ للمكان الفارغ
تُرجعinteger-2d-array
قائمة واحدة من القيم لكل عمود، بدءًا بالعمود الأيسر، وكل قائمة من الأعلى إلى الأسفل

القيود

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

أمثلة

المدخلات
root = [5, 2, 9, 4, 7, 1, 6]
المخرجات
[[4], [2], [5, 1, 7], [9], [6]]
الشرح
يحتوي العمود 0 على الجذر 5، ثم 7 و1 على بُعدين أسفل منه. يشترك هذان العنصران في العمود والعمق، لذا يأتي 1 قبل 7، رغم أن 7 يقع إلى اليسار أكثر.
challenge icon

سؤال إضافي

كل قيمة لا تتجاوز 5000. هل يمكنك الاستفادة من ذلك للاستغناء عن الفرز بالمقارنة وإنهاء التنفيذ في زمن O(n + 5000)؟

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

اختبار #1

اختبار #2

اختبار #3

وسيط

root = [5, 2, 9, 4, 7, 1, 6]

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

[[4], [2], [5, 1, 7], [9], [6]]