-4
我的插入方法不正確,我不知道爲什麼。 我最小的方法錯誤,而不是「內建函數或對象不可下標」這個堆的實現有什麼問題?
我認爲我對堆的概念理解是好的。但其壓裂令人沮喪,當實際insert
把它寫下來:(
class Heap:
def __init__(self):
self.array = []
def find_children(self, index):
""" return both the left and right children """
return index * 2 + 1, index * 2 + 2
def insert(self, value):
""" append node value to the array, then bubble up
to its rightful place
"""
self.array.append(value)
index = self.array.index(value)
while index > 0 or self.array[index] < self.array[index // 2 - 1]:
if self.array[index] < self.array[index // 2 - 1]:
temp = self.array[index]
self.array[index] = self.array[index // 2 - 1]
self.array[index // 2 - 1] = temp
index = index // 2 - 1
def min(self):
""" remove the min at the root, then bubble down to
maintain heap property
"""
minimum = self.array[0]
self.array[0] = self.array[-1]
self.array.pop()
index = self.array.index[minimum]
while index <= len(self.array):
leftChildIndex, rightChildIndex = self.find_children(index)
minChild = min(self.array[leftChildIndex], self.array[rightChildIndex])
if self.array[index] > minChild:
temp = self.array[index]
self.array[index] = minChild
minChild = temp
index = minChild
return minimum
def p(self):
return self.array
你在'self.array.index [最小]處使用了錯誤的括號' – jonrsharpe
@jonrsharpe明白了..這需要一個投票權呵呵 – MAA
只是爲了澄清倒票:錯誤應該有精確的說明問題在哪一行。忽略這些信息,只是傾銷你的代碼讓其他人進行工作並不完全禮貌。 – MisterMiyagi