答案 0 :(得分:5)
由于索引从1开始,(索引0包含0 - 为什么?),您可以按如下方式确定给定节点子节点的索引:
i
i
的左孩子的索引:2i
i
右侧孩子的索引:2i + 1
因此,对于每个节点,您可以轻松检查两个子节点是否大于节点本身。
答案 1 :(得分:3)
is_heap
是一个很好的建议。你只需要使用适当的比较器。您甚至可以毫不费力地将它与基于1的索引与迭代器一起使用:
#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
int main()
{
std::vector<int> v {0, 5, 9, 11, 14, 18, 19 };
std::cout << std::is_heap(
v.begin()+1, // off by 1
v.end(),
std::greater<int>() // std::less is used by default for max-heap
);
}
答案 2 :(得分:0)