while cond1
...
if cond2
...
else
...
break
Il ciclo while
sopra ha due condizioni di terminazione,
-
cond2
e!cond1
-
!cond2
Quando i comandi rappresentati da ...
sono lunghi,
Sento che il codice non è facile da capire.
Le due condizioni di terminazione per lo stesso ciclo while sono molto distanti.
Vedi quando l'interruzione è errata .
C'è un modo migliore per scrivere un codice di questo tipo per renderlo più comprensibile? Ad esempio, possiamo evitare di scrivere le due condizioni di terminazione in due punti separati?
La mia domanda deriva dalla lettura di un programma C ++, ma in realtà non è specifico per i linguaggi di programmazione. Prendi solo i consueti costrutti di controllo disponibili nei linguaggi di programmazione.
Un'implementazione non ricorsiva di attraversamento postorder di un albero binario, usando lo stack
vector<int> postorderTraversal(TreeNode *root) {
vector<int> result;
stack<const TreeNode *> s;
const TreeNode *p = root, *q = nullptr;
do {
while (p != nullptr) {
s.push(p);
p = p->left;
}
q = nullptr;
// start of the example
while (!s.empty()) {
p = s.top();
s.pop();
if (p->right == q) {
result.push_back(p->val);
q = p;
} else {
s.push(p);
p = p->right;
break; //<=== exit inner loop
}
}
// end of example
} while (!s.empty()); //end do..while
return result;
}