Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

لديك مصفوفتان، preorder وinorder، تسردان القيم المميزة للشجرة الثنائية نفسها. يزور ترتيب سابق العقدة، ثم شجرتها الفرعية اليسرى، ثم شجرتها الفرعية اليمنى. ويزور الترتيب الوسطي الشجرة الفرعية اليسرى، ثم العقدة، ثم الشجرة الفرعية اليمنى.

أعِد بناء الشجرة وأرجِعها كمصفوفة بترتيب المستويات: الجذر عند الفهرس 0، وأبناء الفهرس i عند 2i+1 (الأيسر) و2i+2 (الأيمن)، وضع -1 في كل موضع فارغ. تنتهي المصفوفة عند آخر عقدة، من دون أي -1 زائدة في نهايتها.

الدالة

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
القيم بترتيب الزيارة السابق: العقدة، الشجرة الفرعية اليسرى، الشجرة الفرعية اليمنى
inorderinteger-array
القيم بالترتيب الوسطي: الشجرة الفرعية اليسرى، العقدة، الشجرة الفرعية اليمنى
تُرجعinteger-array
الشجرة بترتيب المستويات، مع استخدام ‎-1‎ للمواقع الفارغة ودون ‎-1‎ في النهاية

القيود

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104، وجميع القيم مميزة.
  • inorder يحتوي على القيم نفسها، وتصف المصفوفتان الشجرة الثنائية نفسها.
  • عمق الشجرة لا يزيد عن 14، لذا فإن كل فهرس في الإجابة أقل من 214-1 = 16383.

أمثلة

المدخلات
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
المخرجات
[7, 3, 4, 0, 9, -1, 6]
الشرح
يبدأ الاجتياز السابق للترتيب من الجذر، 7. يقع عند الموضع 3 في inorder، لذا تذهب 0, 3, 9 إلى اليسار، وتذهب 4, 6 إلى اليمين. ليس لدى 4 سوى ابن أيمن، وهو 6، لذا يبقى الفهرس 5 عند -1.
challenge icon

سؤال إضافي

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

إعادة ضبط الشيفرة
def buildTree(preorder, inorder):
    # اكتب الكود هنا

اختبار #1

اختبار #2

الوسائط

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

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

[7, 3, 4, 0, 9, -1, 6]