问题描述
我尝试在 python 中创建一个二进制堆,但打印时遇到问题。我确保程序中的逻辑是正确的,但是当我想尝试打印它时,我得到了错误的结果。这就是我想要的程序输出:
输入:
6
1 2
1 3
1 7
2
3
2
输出:
7
3
- 命令 1 插入数字
- 命令 2 显示最高数字
- 命令 3 删除最高数字
这是我的程序:
class BinaryHeap:
def __init__(self):
self.items = []
def size(self):
return len(self.items)
def parent(self,i):
return (i - 1)//2
def left(self,i):
return 2*i + 1
def right(self,i):
return 2*i + 2
def get(self,i):
return self.items[i]
def get_max(self):
if self.size() == 0:
return None
return self.items[0]
def extract_max(self):
if self.size() == 0:
return None
largest = self.get_max()
self.items[0] = self.items[-1]
del self.items[-1]
self.max_heapify(0)
return largest
def max_heapify(self,i):
l = self.left(i)
r = self.right(i)
if (l <= self.size() - 1 and self.get(l) > self.get(i)):
largest = l
else:
largest = i
if (r <= self.size() - 1 and self.get(r) > self.get(largest)):
largest = r
if (largest != i):
self.swap(largest,i)
self.max_heapify(largest)
def swap(self,i,j):
self.items[i],self.items[j] = self.items[j],self.items[i]
def insert(self,key):
index = self.size()
self.items.append(key)
while (index != 0):
p = self.parent(index)
if self.get(p) < self.get(index):
self.swap(p,index)
index = p
bheap = BinaryHeap()
n = int(input())
for i in range (n):
operation= input('What would you like to do? ').split()
if operation == 1:
data = int(operation[1])
bheap.insert(data)
elif operation == 2:
print('Maximum value: {}'.format(bheap.get_max()))
elif operation == 3:
print('Maximum value removed: {}'.format(bheap.extract_max()))
elif operation == 4:
break
我需要你的意见来修复它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)