我正在尝试检查Max-Heap以查看父母是否有孩子。我的堆实现为向量。起初我写了一个函数bool hasChildren(int loc)loc是堆中父对象的位置。 我的主要条件是:
if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL) //if there are children
问题在于你无法检查超出范围的索引......我想到了指针算法,但这也是无效的。有没有人建议如何检查堆中的父项是否有子项?
谢谢!
答案 0 :(得分:1)
你知道heap
malloc
有多大吗?如果是这样,请确保2 * loc + 1和2 * loc + 2在该范围内。如果heap
被malloc
编辑为包含N个元素,请确保2 * loc + 1和2 * loc + 2小于N:
if(((2*loc+1 < N) && (heap[2*loc + 1] == NULL)) &&
((2*loc+2 < N) && (heap[2*loc + 2] == NULL)))
答案 1 :(得分:0)
问题在于你无法检查越界索引
如果这是std::vector
,您可以使用其at
成员函数并捕获std::out_of_range
例外。