This C program creates a tree from its given preorder and inorder traversal.... the problem is it is going into infinite looping inspite of the dry run working properly..please help...
#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
int key;
struct tree * left;
struct tree * right;
}Tree;
Tree * createTreeFromPreorderInorder(int preorder[],int inorder[],int left,int right, int pos)
{
int index;
if(left > right)
{
return NULL;
}
Tree *t = (Tree*)malloc(sizeof(Tree));
t->key = preorder[pos];
index = search(inorder,left, right, t->key);
t->left = createTreeFromPreorderInorder(preorder,inorder ,left,index-1, pos+1 );
t->right = createTreeFromPreorderInorder(preorder,inorder,index +1, right, pos+1+(left+index));
return t;
}
int search(int arr[],int left, int right,int key)
{
int i;
for(i=left; i <= right; i++)
{
if( key == arr)
{
return i;
}
}
return -1;
}
void display(Tree *t,int level)
{
int i;
if(t)
{
display(t->right, level+1);
printf("\n");
for(i=0;i<level;i++)
printf("\t");
printf("%c\t", t->key);
display(t->left, level+1);
}
}
int main()
{
int preorder[] = {'A', 'B' , 'D', 'E', 'F', 'C', 'G', 'H', 'J','L','K'};
int inorder[] = {'D', 'B','F','E','A','G','C','L','J','H','K'};
Tree *newTree = createTreeFromPreorderInorder(preorder,inorder,0,10,0);
display(newTree,1);
getch();
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
int key;
struct tree * left;
struct tree * right;
}Tree;
Tree * createTreeFromPreorderInorder(int preorder[],int inorder[],int left,int right, int pos)
{
int index;
if(left > right)
{
return NULL;
}
Tree *t = (Tree*)malloc(sizeof(Tree));
t->key = preorder[pos];
index = search(inorder,left, right, t->key);
t->left = createTreeFromPreorderInorder(preorder,inorder ,left,index-1, pos+1 );
t->right = createTreeFromPreorderInorder(preorder,inorder,index +1, right, pos+1+(left+index));
return t;
}
int search(int arr[],int left, int right,int key)
{
int i;
for(i=left; i <= right; i++)
{
if( key == arr)
{
return i;
}
}
return -1;
}
void display(Tree *t,int level)
{
int i;
if(t)
{
display(t->right, level+1);
printf("\n");
for(i=0;i<level;i++)
printf("\t");
printf("%c\t", t->key);
display(t->left, level+1);
}
}
int main()
{
int preorder[] = {'A', 'B' , 'D', 'E', 'F', 'C', 'G', 'H', 'J','L','K'};
int inorder[] = {'D', 'B','F','E','A','G','C','L','J','H','K'};
Tree *newTree = createTreeFromPreorderInorder(preorder,inorder,0,10,0);
display(newTree,1);
getch();
return 0;
}