2016-12-15 12 views
1
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ループのサブパートです。次に、内側ループが終了すると同時に外側ループも終了しますか?内側ループの終了条件は外側ループと同じ

+2

内部ループの後に「node」と「top」の両方を再割り当てすることができるので、内部ループが終了すると自動的に外部ループも終了するわけではありません。 –

+0

内側のループ条件が停止すると、 'if'がチェックされてから' do while'が再びチェックされます。もし 'node'が' if'の中で 'NULL'以外の値に変更されていれば、外側の' while'は継続します。 – duncan

+0

もし 'top == NULL'ならループは永遠にループします... – LPs

答えて

3

いいえいいえ内部ループが終了すると、コントロールの外側ループに渡されます。外部ループは、現在の反復で残りのタスクを実行し、次の反復を開始するか、または適用された条件に基づいて終了します。内部ループ条件は外部ループに影響しません。

0

内側のループが終了した後、topがNULLの場合(ブロックが入力されていない場合)、外側のループが終了します。それ以外の場合は、ifブロックの代入によって異なります。

あなたのケースでは、内側ループの終了は外側ループの終了を意味するものではありません。

関連する問題