Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาผลรวมขององค์ประกอบเส้นทางเส้นทแยงมุมแต่ละรายการในต้นไม้ไบนารีใน Python


สมมติว่าเรามีไบนารีทรี เราต้องหาผลรวมของเส้นทแยงมุมแต่ละอันในต้นไม้โดยเริ่มจากบนลงล่างขวา

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมหาผลรวมขององค์ประกอบเส้นทางเส้นทแยงมุมแต่ละรายการในต้นไม้ไบนารีใน Python

จากนั้นผลลัพธ์จะเป็น [27, 18, 3] เนื่องจากเส้นทแยงมุมคือ [12,15], [8,10],[3] ดังนั้นค่าผลรวมคือ [27, 18, 3]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

กำหนดฟังก์ชัน traverse() สิ่งนี้จะใช้โหนด, numLeft, เอาต์พุต

  • หากโหนดเป็นโมฆะ

    • กลับ

  • ถ้า numLeft>=ขนาดของเอาต์พุต แล้ว

    • แทรกข้อมูลของโหนดที่ส่วนท้ายของเอาต์พุต

  • มิฉะนั้น

    • เอาต์พุต[numLeft] :=เอาต์พุต[numLeft] + ข้อมูลของโหนด

  • หากโหนดที่เหลือไม่เป็นโมฆะ

    • สำรวจ (ด้านซ้ายของโหนด numLeft+1 เอาต์พุต)

  • หากสิทธิ์ของโหนดไม่เป็นโมฆะ

    • สำรวจ (ด้านขวาของโหนด numLeft เอาต์พุต)

  • จากวิธีหลัก ให้ทำดังนี้ −

  • output :=รายการใหม่

  • traverse(root, 0, output)

  • ส่งคืนเอาต์พุต

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
class Solution:
   def solve(self, root):
      output = []
      def traverse(node, numLeft, output):
         if not node:
            return
         if numLeft >= len(output):
            output.append(node.data)
         else:
            output[numLeft] += node.data
         if node.left:
            traverse(node.left, numLeft+1, output)
         if node.right:
            traverse(node.right, numLeft, output)
      traverse(root, 0, output)
      return output
ob = Solution()
root = TreeNode(12)
root.left = TreeNode(8)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(10)
print(ob.solve(root))

อินพุต

root = TreeNode(12)
root.left = TreeNode(8)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(10)

ผลลัพธ์

[27, 18, 3]