Вы должны реализовать это как дерево.Это будет легко и интересно.Куча имеет только то свойство, что любой узел имеет значение, которое меньше или равно его родительскому элементу, если это максимальная куча.В реализации массива мы накладываем еще несколько условий.Если вам нужна помощь по реализации конкретной функции, вы можете спросить ее.
Вам нужно пройти вниз, чтобы добавить новый узел
вызвать его с корнем, значение для вставки
insert(node, x){
if(node->value >= x)
//insert
if(node->left == 0)
node->left = new Node(x);
else if(node->right == 0)
node->right = new Node(x);
else if(node->left->value >= x)
insert(node->left, x);
else if(node->right->value >= x)
insert(node->right, x);
else
//insert between node and its any one child
insertBW(node, node->left, x);
else //if x is less than node value
//insert between node and its parent
insertBW(node->parent, node, x)
}
insertBW (p, c) - это функция, которая вставляет узел, содержащий значение x между p и c
(я не проверял этот код, проверьте наличие ошибок)
insertBW(Node* p, Node* c, T x)
{
Node* newnode = new Node(x);
newNode.x = x;
if(p == 0) //if node c is root
{
newnode.left = Tree.root.left;
Tree.root = newnode;
}
else
{
newnode.parent = p;
newnode.child = c;
if(p.left == c)
{
p.left = newnode;
}
else p.right = newnode;
}
}