class BigPq (Object): DEF the __init__ (Self, ARR: List): self.arr = ARR self.mark =. 1 the while self.mark ==. 1 : self.build () DEF Build (Self): self.mark = 0 # first set to zero, as long as after a swap function, it is set again. 1 index = len (self.arr) -. 1 for I in Range (index): IF I 2 + 2 * <= index: # if left and right sub node exists, to compare their size self.tri (I, I *. 1 + 2, 2 + 2 * I ) elif i * 2 + 1 <= index: # 如果只有左子节点存在,去比较他们的大小 if self.arr[i] < self.arr[i * 2 + 1]: self.swap(i, i * 2 + 1) else: break def tri(self, head: int, left: int, right: int): if self.arr[head] < self.arr[left]: self.swap(head, left) if self.arr[head] < self.arr[right]: self.swap(head, right) def swap(self, index_1: int, index_2: int): self.mark = 1 temp = self.arr[index_2] self.arr[index_2] = self.arr[index_1] self.arr[index_1] = temp def show(self): print(self.arr) def pop(self) -> int: self.arr[0] = self.arr[-1] temp = self.arr.pop() self.mark = 1 while self.mark == 1: self.build() return temp def push(self, value: int): self.arr.append(value) self.mark = 1 while self.mark == 1: self.build()
python achieve binary heap heap big top
Guess you like
Origin www.cnblogs.com/jiaxiaoxin/p/10960179.html
Recommended
Ranking