2016-12-15 88 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) ; 
} 

在上面的代码块中,inner while循环中的终止条件是外部do-while循环的子部分。那么,当内部while循环终止时,外部循环是否会同时终止?内循环的终止条件与外循环相同

+2

'node'和'top'都可以在内部循环后重新分配,所以仅仅因为内部循环退出并不意味着外部循环也会自动。 –

+0

不完全。如果内部循环条件停止,将在再次检查外部'do while'之前检查'if'。如果'if'中的'node'被更改为非'NULL'值,则外部'while'将继续。 – duncan

+0

那么,如果'顶部== NULL'循环永远循环... – LPs

回答

3

当内部循环结束时,它将控制权移交给外部循环。外循环执行当前迭代中的剩余任务,并开始下一次迭代或基于应用的条件终止。内部循环条件不会影响外部循环。

0

内循环结束后,如果top为NULL(如果未输入块),则外循环将退出。否则,它取决于if块中的分配。

所以在你的情况下,内循环的终止并不意味着终止外循环。