Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MinHeap:
- def __init__(self):
- self.size = 0
- self.array = []
- def lchild(self, i):
- if i == 0:
- return heap.array[1]
- else:
- try:
- return heap.array[2*i+1]
- except IndexError:
- return None
- def rchild(self, i):
- if i == 0:
- return heap.array[2]
- else:
- try:
- return heap.array[2*i+2]
- except IndexError:
- return None
- def father(self, i):
- if i == 1 or i == 2:
- return heap.array[0]
- elif i == 0:
- return None
- elif i % 2 == 0:
- try:
- return heap.array[i/2-1]
- except IndexError:
- return None
- else:
- try:
- return heap.array[i//2]
- except IndexError:
- return None
- def is_canonical_min_heap(heap):
- if heap.size == 0 or heap.size == 1:
- return True
- for i in range(heap.size):
- if self.lchild(i) is None and self.rchild(i) is None:
- pass
- if self.lchild(i) > self.rchild(i):
- return False
- return True
- def canonise_min_heap(heap):
- for i in range(heap.size):
- lc = self.lchild(i)
- rc = self.rchild(i)
- fr = self.father(i)
- if fr is None:
- pass
- else:
- if heap.array[i] > fr:
- heap.array[i], fr == fr, heap.array[i]
- i = 0
- if lc is None and rc is None:
- pass
- else:
- if lc > rc:
- lc, rc = rc, lc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement