Python实现二叉堆输出结果错误,求代码修复方案
二叉堆代码问题排查与修复方案
核心问题梳理
- 操作判断逻辑完全失效:
operation是输入内容分割后的字符串列表,直接和整数1/2/3做等值判断永远返回False,导致没有任何操作能正常执行 - 输入逻辑不符合要求:调用
input()时传入了多余的提示文本,不适配纯指令输入场景 - 输出逻辑不符合要求:
- 指令2要求仅输出最大值本身,原有代码携带了
Maximum value:前缀 - 指令3仅要求删除最大值不需要输出内容,原有代码额外输出了删除提示
- 指令2要求仅输出最大值本身,原有代码携带了
修复后完整代码
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().split() op = int(operation[0]) if op == 1: data = int(operation[1]) bheap.insert(data) elif op == 2: print(bheap.get_max()) elif op == 3: bheap.extract_max()
验证说明
使用题目给出的示例输入运行修复后代码,可直接得到期望的7和3两行输出,完全符合需求。
内容的提问来源于stack exchange,提问作者ryand
相关产品推荐
相关产品推荐

