堆中的父级是否有子级

时间:2011-12-26 18:49:58

标签: c++ tree heap children

我正在尝试检查Max-Heap以查看父母是否有孩子。我的堆实现为向量。起初我写了一个函数bool hasChildren(int loc)loc是堆中父对象的位置。 我的主要条件是:

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

问题在于你无法检查超出范围的索引......我想到了指针算法,但这也是无效的。有没有人建议如何检查堆中的父项是否有子项?

谢谢!

2 个答案:

答案 0 :(得分:1)

你知道heap malloc有多大吗?如果是这样,请确保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)))

答案 1 :(得分:0)

  

问题在于你无法检查越界索引

如果这是std::vector,您可以使用其at成员函数并捕获std::out_of_range例外。