【问题标题】:parent in a heap has children or not堆中的父母是否有孩子
【发布时间】:2012-01-28 03:04:36
【问题描述】:

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

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

问题是您无法检查越界索引...我想到了指针算术,但这也是无效的。有人对如何检查堆中的父母是否有孩子有建议吗?

谢谢!

【问题讨论】:

  • 这是你实现中的向量 吗?在这种情况下,您可能需要删除 C 标记。
  • 但不应该反过来,如果至少一个子索引不为空,您的节点就有子节点吗?

标签: c++ tree heap children


【解决方案1】:

你知道heap 是多大的malloced 吗?如果是这样,只需确保 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)))

【讨论】:

  • 哈哈哈哇...是的,我确实可以访问堆的大小。非常感谢!
【解决方案2】:

问题是你不能检查越界索引

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多