Assignment1
Assignment1
// Structure of a node
struct Node {
int key;
int degree;
Node *parent;
Node*sibling;
Node*child;
Node(int c) {
key = c;
degree = 0;
parent = nullptr;
sibling = nullptr;
child = nullptr;
};
y->parent = z;
y->sibling = z->child;
z->child = y;
z->degree++;
if(!h1)return h2;
if(!h2)return h1;
Node*mergeHead = nullptr;
Node*tail = mergeHead;
current = h1;
h1 = h1->sibling;
else{
current = h2;
h2 = h2->sibling;
if(mergeHead == nullptr){
mergeHead = current;
tail = current;
tail = current;}
if(h1 != nullptr) {
tail->sibling = h1;
else if(h2!=nullptr){
tail->sibling = h2;
return mergeHead;
while (next) {
if ((curr->degree != next->degree) ||
prev = curr;
curr = next;
} else {
curr->sibling = next->sibling;
binomial_Link(next, curr);
} else {
if (prev) {
prev->sibling = next;
} else {
newHead = next;
binomial_Link(curr, next);
curr = next;
next = curr->sibling;
return newHead;
while (h) {
if (h->child)
h = h->sibling;
Node* createHeapH1() {
n7->child = n25;
n25->parent = n7;
n15->child = n28;
n28->parent = n15;
n28->sibling = n33;
n33->parent = n15;
n28->child = n41;
n41->parent = n28;
n12->sibling = n7;
n7->sibling = n15;
return n12;
Node* createHeapH2() {
n3->child = n37;
n37->parent = n3;
n37->sibling = n30;
n30->parent = n3;
n30->child = n45;
n45->parent = n30;
n45->child = n55;
n55->parent = n45;
n30->sibling = n32;
n32->parent = n3;
n6->child = n8;
n8->parent = n6;
n8->sibling = n29;
n29->parent = n6;
n29->sibling = n10;
n10->parent = n6;
n10->sibling = n44;
n44->parent = n6;
n8->child = n23;
n23->parent = n8;
n23->sibling = n22;
n22->parent = n8;
n22->sibling = n48;
n48->parent = n8;
n23->sibling->sibling = n50;
n50->parent = n8;
n23->sibling->sibling->sibling = n24;
n24->parent = n8;
n29->child = n31;
n31->parent = n29;
n31->sibling = n17;
n17->parent = n29;
n18->sibling = n3;
n3->sibling = n6;
return n18;
}
int main() {
Node* H1 = createHeapH1();
Node* H2 = createHeapH2();
printTree(H1);
printTree(H2);
printTree(H);
return 0;