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

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

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

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

ขั้นตอนการแก้ปัญหา

  • กำหนดฟังก์ชัน traverse() รับ node, numLeft, output
    • ถ้า node เป็น null คืนค่า
    • ถ้า numLeft >= ขนาดของ output ใส่ข้อมูลของ node เข้า output
    • มิฉะนั้น output[numLeft] := output[numLeft] + ข้อมูลของ node
    • ถ้า left of node ไม่ใช่ null เรียก traverse(left of node, numLeft+1, output)
    • ถ้า right of node ไม่ใช่ null เรียก traverse(right of node, numLeft, output)
  • จากเมธอดหลัก output := รายการใหม่ เรียก traverse(root, 0, output) คืนค่า 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]