Here is a program to create huffman tree, written by my junior.
what's error? perhaps it is printing memory addresses.
#include <stdio.h>
#include <stdlib.h>
struct link
{
int data;
struct link *next, *left, *right;
};
typedef struct link node;
node *curr = NULL, *head = NULL, *nnode = NULL;
void createheap();
void main()
{
node* i;
int k1, k2;
int ch;
int x;
printf("create node\nadd nodes\ntraverse node\nmake heap\n");
do
{
printf("enter the choice\n");
scanf("%d", &ch);
switch (ch)
{
case 1:
nnode = (node*)malloc(sizeof(node));
printf("enter number please\n");
scanf("%d", &x);
nnode->data = x;
nnode->next = NULL;
nnode->left = NULL;
nnode->right = NULL;
head = nnode;
curr = nnode;
break;
case 2:
nnode = (node*)malloc(sizeof(node));
printf("enter number please\n");
scanf("%d", &x);
nnode->data = x;
nnode->next = NULL;
nnode->left = NULL;
nnode->right = NULL;
curr->next = nnode;
curr = nnode;
break;
case 3:
printf("traverse\n");
for (i = head; i != NULL; i = i->next)
{
printf("%d\n", i->data);
}
break;
case 4:
createheap();
break;
default:
printf("this is wrong number\n");
}
} while (ch <= 5);
}
void createheap()
{
node* l;
node *t1, *t2, *t;
node *np, *r1;
int k1, k2, k3;
node* i;
// void traverse(node*);
l = head;
while (head->next != NULL)
{
l = head;
t = l;
nnode = (node*)malloc(sizeof(node));
t1 = t->next;
t2 = t->next->next;
k1 = t->data;
k2 = t1->data;
k3 = k1 + k2;
if (t2 == NULL)
{
nnode->left = t;
nnode->right = t1;
nnode->data = k3;
nnode->next = NULL;
curr = nnode;
head = nnode;
}
else if (k3 <= t2->data)
{
nnode->next = t2;
nnode->left = t;
nnode->right = t1;
nnode->data = k3;
head = nnode;
}
else if (k3 > t2->data)
{
nnode->left = t;
nnode->right = t1;
nnode->data = k3;
if (k3 <= curr->data)
{
for (i = t2; i != NULL; i = i->next)
{
if (i->data >= k3)
{
break;
}
else
{
np = i;
}
}
r1 = np->next;
nnode->next = r1;
np->next = nnode;
}
else if (k3 > curr->data)
{
nnode->next = NULL;
curr->next = nnode;
curr = nnode;
}
head = t2;
}
free(t);
free(t1);
printf("l %d\n", nnode->left);
printf("r %d\n", nnode->right);
printf("d %d\n", nnode->data);
}
// traverse(l);
// printf("\n%d",l->left->data);
// printf("\n%d",l->right->left->data);*/
}
void traverse(node* t)
{
if (t != NULL)
{
traverse(t->left);
printf("\n%d\n", t->data);
traverse(t->right);
}
}
"create node" means initialise the list and enter first value.
"add nodes" means add second, third and so on.. values. (please provided sorted values only for now)
"make heap" means create heap out of provided list, AND print left(l), right(r) and root values(d), from bottom of tree (as it gets made).
So, problem is root is printing correct value. but left and right are printing like.. 31298384, 31298323.