Idea:
maintain array keep all theelemnts in arry then traverse array in way to get spiral order
example:
For the given tree,(1)
(2) (3)
(4) (5) (6) (7)
(8) (9)
Spiral traversal is
1, 2, 3, 7, 6, 5, 4, 8, 9 ….
Array elements after inserting elements will be
1 null 2 3 null 7 6 5 4 null 8 9 null
In array after every level insert null then traverse in forward direction till null and go next null traverse backward direction to null continue same process
Code:
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define QUEUESIZE 20
struct treenode
{
int data;
struct treenode *left;
struct treenode *right;
} *root=NULL;
//building tree
struct treenode * buildtree()
{
struct treenode *temp1,*temp2,*temp3,*temp4,*temp5,*temp6;
root=(struct treenode *)malloc(sizeof(struct treenode));
temp1=(struct treenode *)malloc(sizeof(struct treenode));
temp2=(struct treenode *)malloc(sizeof(struct treenode));
temp3=(struct treenode *)malloc(sizeof(struct treenode));
temp4=(struct treenode *)malloc(sizeof(struct treenode));
temp5=(struct treenode *)malloc(sizeof(struct treenode));
temp6=(struct treenode *)malloc(sizeof(struct treenode));
root->data=4;
root->left=temp1;
temp1->data=5;
root->right=temp2;
temp2->data=6;
temp1->left=temp3;
temp3->data=7;
temp3->left=temp3->right=NULL;
temp1->right=temp4;
temp4->data=8;
temp4->left=NULL;
temp4->right=NULL;
temp2->left=temp5;
temp5->data=6;
temp2->right=temp6;
temp6->data=10;
temp5->left=temp5->right=temp6->left=temp6->right=NULL;
printf("\n tree buildedsuccessfull");
return root;
}
void print(int *a[],int n)
{
struct treenode *temp;
int k=0,i,j,m;
for(j=0;j<n;)
{
if(a[j]==NULL)
{
k++;
j++;
}
else if(k%2==0)
{
temp=a[j];
j++;
printf("%d ",temp->data);
}
else if(k%2==1)
{
i=j;
while(a[i]!=NULL)
i++;
for(m=i-1;m>=j;m--)
{
temp=a[m];
printf("%d ",temp->data);
}
j=i;
}
}
}
//zizag order
void zigzag(struct treenode *root)
{
int *array[QUEUESIZE],i=0,j=-1;
struct treenode *k;
array[++j]=root;
array[++j]=NULL;
while(i<j)
{
if(root!=NULL)
{
if(root->left!=NULL)
array[++j]=root->left;
if(root->right!=NULL)
array[++j]=root->right;
root=array[++i];
}
else
{
array[++j]=NULL;
root=array[++i];
}
}
print(array,j);
}//end
//main
void main()
{
struct treenode *root;
int i=1;
while(i)
{
printf("\n enter 1 to build elements");
printf("\n enter 2 print elements in zigzag order");
scanf("%d",&i);
switch(i)
{
case 1:
root=buildtree();
break;
case 2:
zigzag(root);
break;
}
}
}
No comments:
Post a Comment