反復版を書くように頼まれましたが、再帰版を書きました。
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;
}
}
しかし、再帰呼び出しが 2 つある場合、どのように反復プログラムに変換すればよいでしょうか?
ここに型定義があります。
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;
}