你应该把它作为一个树来实现。这将是容易和有趣的。堆只具有任何节点的值小于或等于其父值的属性,如果它是最大堆。 在数组实现中,我们施加了更多条件。 如果您需要关于特定功能实现的帮助,那么您可以问问它。
您需要向下行进到添加新节点
与根调用它,值被插入
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;
}
}
这是什么语言? – 2017-08-06 02:02:41