7777733333 2022-05-11 00:02 采纳率: 87.5%
浏览 50
已结题

二叉堆实现最大堆中的insert()和delMax()并检测

class maxheap(object):
def init(self):
self.heapList = [0]
self.currentSize = 0
def insert(self,k):
self.heapList.append(k)
self.heapList = self.currentSize - 1
self.percUp(self.currentSize)

def percUp(self,i):
    while i // 2 > 0:
        if self.heapList[i] > self.heapList[i//2]:
             telf.heapList[i//2]
             self.heapList[i//2] = self.heapList[i]
             self.heapList[i] = tmp
        i = i//2

def percDown(self,i):
    while(i*2) <= self.currentSize:
        maxc = self.maxChild(i)
        if self.heapList[i] < self.heapList[maxc]:
            tmp = self.heapList[i]
            self.heapList[i] = self.heapList[maxc]
            self.heapList[maxc] = tmp
        i = maxc

def maxChild(self,i):
    if i * 2 + 1 > self.currentSize:
        return i * 2
    else:
        if self.heapList[i*2] < self.heapList[i*2+1]:
            return i*2+1
        else:
            return i*2
def delMax(self):
    retval = self.heapList[1]
    self.heapList[1] = self.heapList[self.currentSize]
    self.currentSize = self.currentSize - 1
    self.heapList.pop()
    self.percDown(1)
    return retval

if name=='main':
a = maxheap()
a.insert(7)
a.insert(10)
a.insert(3)
a.insert(6)
a.insert(13)
print(a)

img

img


怎样解决报错,并测试insert和delMax的可行性

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2022-05-11 18:04
    关注

    打印堆中的元素就能看出效果了
    堆队列初始时,不要给默认元素0

    self.heapList = []
    
    class maxheap(object):
        def __init__(self):
            self.heapList = []
            self.currentSize = 0
        def insert(self,k):
            self.heapList.append(k)
            self.currentSize = self.currentSize - 1
            self.percUp(self.currentSize)
        
        def percUp(self,i):
            while i // 2 > 0:
                if self.heapList[i] > self.heapList[i//2]:
                     telf.heapList[i//2]
                     self.heapList[i//2] = self.heapList[i]
                     self.heapList[i] = tmp
                i = i//2
         
        def percDown(self,i):
            while(i*2) <= self.currentSize:
                maxc = self.maxChild(i)
                if self.heapList[i] < self.heapList[maxc]:
                    tmp = self.heapList[i]
                    self.heapList[i] = self.heapList[maxc]
                    self.heapList[maxc] = tmp
                i = maxc
         
        def maxChild(self,i):
            if i * 2 + 1 > self.currentSize:
                return i * 2
            else:
                if self.heapList[i*2] < self.heapList[i*2+1]:
                    return i*2+1
                else:
                    return i*2
        def delMax(self):
            retval = self.heapList[1]
            self.currentSize = self.currentSize - 1
            self.heapList.pop()
            self.percDown(1)
            return retval
    if __name__=='__main__':
        a = maxheap()
        a.insert(7)
        a.insert(10)
        a.insert(3)
        a.insert(6)
        a.insert(13)
        print(a.heapList)
        a.delMax()
        print(a.heapList)
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月11日

悬赏问题

  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程