WAP to label the tree for code generation

, by Prashant Gunjal

/*
1) WAP to label the tree for code generation.
Input:   Syntax Tree
Output: Labelled syntax tree [use any tree traversal method]
*/
#include<stdio.h>
#include<stdlib.h>

typedef struct holder
{
char name[5];
int label;
struct holder * left,*right;
}node;

node * root=NULL, *temp;

node * getnode()
{
return((node*)malloc(sizeof(node)));
}

node * create()
{
node * temp;
char ch[5];
temp=getnode();
printf("\n\tEnter Node : ");
scanf("%s",temp->name);
printf("\n\tIs there left node present for %s (y / n): ",temp->name);
scanf("%s",ch);
if(strcmp(ch,"y")==0)
temp->left=create();
else
temp->left=NULL;

printf("\n\tIs there right node present for %s (y / n): ",temp->name);
scanf("%s",ch);
if(strcmp(ch,"y")==0)
temp->right=create();
else
temp->right=NULL;

return(temp);
}

void label(node * temp)
{
node * temp1;
if(temp->left!=NULL || temp->right!=NULL)
{
label(temp->left);
label(temp->right);

temp1=temp->left;
if(temp1->left==NULL && temp1->right==NULL) //left leaf node
temp1->label=1;

temp1=temp->right;
if(temp1->left==NULL && temp1->right==NULL) // rt leaf
temp1->label=0;

if(temp->left->label == temp->right->label)
temp->label=temp->left->label+1;
else
if(temp->left->label > temp->right->label)
temp->label=temp->left->label;
else
temp->label=temp->right->label;
}
}
void print(node * temp)
{
if(temp!=NULL)
{
print(temp->left);
print(temp->right);
printf("\n\t %s \t %d",temp->name,temp->label);
}
}
int main()
{
int i,j,k,no;
printf("\n\tEnter syntax tree : ");
root=create();
label(root);
if(root->left->label == root->right->label)
root->label=root->left->label+1;
else if(root->left->label > root->right->label)
root->label=root->left->label;
else
root->label=root->right->label;
print(root);
}

0 comments: