Link insert(Link pq,Item aData)
{
if (!pq)
{
return pq;
}
if (pq->l)
{
if (pq->data == pq->l ->data)
{
pq->flag = 1;
insert(pq->l, aData);
}
}
if (pq->r)
{
if (pq->data == pq->r->data)
{
pq->flag = 1;
insert(pq->r, aData);
}
}
if (pq)
{
if (pq->flag == 1)
{
if ((pq->l->flag == 0)||(pq->r->flag == 0))
{
if (pq->l->data == pq->data)
{
Link x = NEW(aData);
Link x1 = NEW(aData);
if (aData < pq->l->data)
{
x1->data = pq->l->data;
}
x1->l = pq->l;
x1->r = x;
if (x1->data > pq->r->data)
{
pq->data = x1->data;
}
else if (x1->data > pq->r->data)
{
pq->data = pq->r->data;
}
pq->l = x1;
}
else if (pq->r->data == pq->data)
{
Link x = NEW(aData);
Link x1 = NEW(aData);
if (aData < pq->r->data)
{
x1->data = pq->r->data;
}
x1->l = pq->r;
x1->r = x;
if (x1->data > pq->l->data)
{
pq->data = x1->data;
}
else if (x1->data > pq->r->data)
{
pq->data = pq->l->data;
}
pq->r = x1;
}
}
else
{
if(pq->l->flag == 1)
{
pq->data = pq->l->data;
pq->l->flag = 0;
}
else if (pq->r->flag == 1)
{
pq->data = pq->r->data;
pq->r->flag = 0;
}
}
}
}
return pq;
}