Меня попросили написать итеративную версию, но я написал рекурсивную версию, т.е.
void inorderTraverse(BinaryTree root)
{
if(root==NULL)
printf("%d",root->id);
else
{
inorderTraverse(root->left);
printf("%d",root->id);
inorderTraverse(root->right);
}
}
Я не ищу код, я хочу понять, как это можно сделать.Если бы это был только последний рекурсивный вызов, я бы сделал
void inorderTraverse(BinaryTree root)
{
while(root!=NULL)
{
printf("%d",root->id);
root=root->right;
}
}
Но как мне преобразовать в итеративную программу, когда есть два рекурсивных вызова?
Вот определения типов.
struct element{
struct element* parent;
int id;
char* name;
struct element* left;
struct element* right;
};
typedef element* BinaryTree;
Это то, о чем я думал, я на правильном пути?
temp=root;
while(1)
{
while(temp!=NULL)
{
push(s,temp);
temp=temp->left;
continue;
}
temp=pop(s);
if(temp==NULL)
return;
printf("%d\t",temp->data);
temp=temp->right;
}