You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现二叉堆输出结果错误,求代码修复方案

二叉堆代码问题排查与修复方案

核心问题梳理

  1. 操作判断逻辑完全失效:operation是输入内容分割后的字符串列表,直接和整数1/2/3做等值判断永远返回False,导致没有任何操作能正常执行
  2. 输入逻辑不符合要求:调用input()时传入了多余的提示文本,不适配纯指令输入场景
  3. 输出逻辑不符合要求:
    • 指令2要求仅输出最大值本身,原有代码携带了Maximum value: 前缀
    • 指令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().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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 21:54:03