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

ตรวจสอบ Max Heap ใน Python

ภาพรวม

Max Heap เป็นโครงสร้างข้อมูลแบบต้นไม้เต็ม (Complete Binary Tree) ที่ค่าของโหนดแม่ (parent) มากกว่าหรือเท่ากับโหนดลูก (children) ทุกคู่ บทความนี้ตรวจสอบว่าลิสต์ตัวเลขที่กำหนดเป็น Max Heap ที่ถูกต้องหรือไม่

เงื่อนไข Max Heap (0-indexed array)

  • โหนด i มีลูกซ้ายที่ 2i+1, ลูกขวาที่ 2i+2
  • ต้องมี nums[i] >= nums[2*i+1] (ถ้ามีลูกซ้าย)
  • ต้องมี nums[i] >= nums[2*i+2] (ถ้ามีลูกขวา)

ตัวอย่าง

อินพุต: [5, 3, 4, 1, 2]

โครงสร้าง:

       5
     /   \
    3     4
   / \
  1   2
5≥3, 5≥4, 3≥1, 3≥2 → True

โค้ด Python

class Solution:
    def solve(self, nums):
        for i in range(len(nums) // 2):
            if not nums[i] >= nums[2*i + 1]:
                return False
            if 2*i + 2 <= len(nums) - 1:
                if not nums[i] >= nums[2*i + 2]:
                    return False
        return True

ob = Solution()
nums = [5, 3, 4, 1, 2]
print(ob.solve(nums))

รายละเอียดลูป

  • วนแค่ len(nums)//2 รอบ เพราะโหนดใบ (leaf) ไม่มีลูก ไม่ต้องตรวจสอบ
  • เช็ค left child เสมอ (เพราะ complete tree)
  • เช็ค right child เฉพาะถ้าอยู่ในขอบเขต

ผลลัพธ์

True