2011-12-26 102 views
0

我正在检查Max-Hep以查看父项是否有子项。我的堆被实现为一个向量。起初,我写了一个函数bool hasChildren(int loc)loc是父节点在堆中的位置。 我的主要条件是:堆中的父项是否有子项

if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL) //if there are children 

的问题是,你不能检查出界指数的...我想指针计算但这是无效了。有没有人建议如何检查堆中的父母是否有孩子?

谢谢!

+0

是你的实现中的一个向量?在这种情况下,您可能需要删除C标签。 – 2011-12-26 18:58:34

+2

但是,如果至少有一个子索引是非空的,那么您的节点是否应该有其他方法? – Vlad 2011-12-26 19:02:04

回答

0

的问题是,你不能检查出界指数

如果这是一个std::vector,您可以使用它的at成员函数并捕获std::out_of_range异常。

1

您是否知道heap有多大malloc ed是?如果是这样,只要确保2 * loc + 1和2 * loc + 2在该范围内。如果heapmalloc版有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))) 
+0

哈哈哈哇...是的,我可以访问堆的大小。非常感谢! – CodeKingPlusPlus 2011-12-26 19:02:27

相关问题