void preorder(tree *node)
{
do
{
while(node != NULL)
{
printf("%d ", node -> data) ;
if(node -> right != NULL)
top = push(top , node -> right) ;
node = node -> left ;
}
if(top != NULL)
{
node = top -> ptr ;
top = pop(top) ;
}
}while(top != NULL || node != NULL) ;
}
上記のコードブロックでは、内部whileループの終了条件は外側do-whileループのサブパートです。次に、内側ループが終了すると同時に外側ループも終了しますか?内側ループの終了条件は外側ループと同じ
内部ループの後に「node」と「top」の両方を再割り当てすることができるので、内部ループが終了すると自動的に外部ループも終了するわけではありません。 –
内側のループ条件が停止すると、 'if'がチェックされてから' do while'が再びチェックされます。もし 'node'が' if'の中で 'NULL'以外の値に変更されていれば、外側の' while'は継続します。 – duncan
もし 'top == NULL'ならループは永遠にループします... – LPs