Ваша логика верна, но в вашем коде есть некоторые ошибки.
root=root->right;
printf("right data is:%d\n",root->data);
Вы должны проверить, является ли корень нулевым или нет, прежде чем пытаться получить доступ к root-> данным.Вот почему вы получаете ошибку сегментации.Поэтому поместите условие if(root!=NULL)
выше printf()
оператора.
Другая ошибка заключается в реализации pop стека.
struct node *pop()
{
printf("popcalled\n");
if(top!=-1)
{
return a[top];
top--;
}
}
это должно быть так,
struct node *pop()
{
printf("popcalled\n");
if(top!=-1)
{
struct node* temp = a[top];
top--;
return temp;
}
}
В вашем коде, когда вы возвращаете a[top];
строка под ним, т.е. top--;
никогда не выполняется и значение top остается неизменным.