【发布时间】:2021-05-03 22:43:02
【问题描述】:
我有这个函数 def validate(self) 应该检查给定数组是否是有效的最小堆。我认为它有效,但因为我的数组在开头没有像 [None, 2, 3, 5] 这样的数组,它似乎遇到了问题并给我错误'<' not supported between instances of 'int' and 'NoneType'
如何跳过代码中的 none 值?
def validate(self):
"""
Validates the heap. Returns True if the heap is a valid min-heap, and
False otherwise.
"""
n = self.__len__()
for i in range(int((n - 2) / 2) + 2):
if self._items[2 * i + 1] < self._items[i]:
return False
if (2 * i + 2 < n and self._items[2 * i + 2] > self._items[i]):
return False
return True
新代码:
def validate(self):
"""
Validates the heap. Returns True if the heap is a valid min-heap, and
False otherwise.
"""
n = self.__len__()
for i in range(int((n - 2) / 2) + 2):
if self._items[i] != None:
if self._items[2 * i + 1] < self._items[i]:
return False
if (2 * i + 2 < n and self._items[2 * i + 2] > self._items[i]):
return False
错误:
File "<doctest __main__.MinHeap.validate[8]>", line 1, in <module>
h.validate()
File "x-wingide-python-shell://114699264/2", line 219, in validate
TypeError: '>' not supported between instances of 'int' and 'NoneType'
【问题讨论】:
-
None不能与其他元素进行比较,因此它不应该是堆数组的一部分。我认为生成的二叉树是不平衡的…… -
在使用数组实现堆时,根节点可以位于索引 0 或 1 处,即Why in a heap implemented by array the index 0 is left unused。由于 None 位于索引 0 处,这似乎根节点位于索引 1 处,因此应相应地检查数组。