Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 堆中的父级是否有子级_C++_Tree_Heap_Children - Fatal编程技术网

C++ 堆中的父级是否有子级

C++ 堆中的父级是否有子级,c++,tree,heap,children,C++,Tree,Heap,Children,我正在尝试检查最大堆,以查看父级是否有子级。我的堆是作为向量实现的。首先,我编写了一个函数boolhaschilds(intloc),loc是堆中父级的位置。 我的主要条件是: if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL) //if there are children 问题是您无法检查越界索引。。。我想到了指针算法,但那也是无效的。有人对如何检查堆中的父级是否有子级有什么建议吗 谢谢 你知道heap的mall

我正在尝试检查最大堆,以查看父级是否有子级。我的堆是作为向量实现的。首先,我编写了一个函数boolhaschilds(intloc),loc是堆中父级的位置。 我的主要条件是:

if(heap[2*loc + 1] == NULL && heap[2*loc + 2] == NULL)   //if there are children
问题是您无法检查越界索引。。。我想到了指针算法,但那也是无效的。有人对如何检查堆中的父级是否有子级有什么建议吗


谢谢

你知道
heap
malloc
ed有多大吗?如果是这样,只需确保2*loc+1和2*loc+2在该范围内即可。如果
heap
malloc
ed为具有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)))
if((2*loc+1
问题是您无法检查越界索引


如果这是一个
std::vector
,您可以使用它的
at
成员函数捕获
std::out\u of\u range
异常。

在您的实现中是一个向量吗?在这种情况下,您可能希望删除C标记。但是,如果至少有一个子索引为非空,那么您的节点是否应该有子节点?哈哈,哇。。。是的,我可以访问堆的大小。非常感谢!