Kannst du den Algorithmus in iterative Art umschreiben?
Folgendes ist eine mögliche iterative Lösung mit Laufzeit O(n):

```python
def count_nodes_iterative(root):
  if not root:
    return 0
  stack = [ root ]
  count = 0
  while len(stack) > 0:
    node = stack.pop()
    if not node:
      continue
    stack += [node.left, node.right]
    count += 1
  return count
```

Bei dieser Implementierung werden alle Knoten, die noch nicht gezählt wurden in einer Variablen `stack` gespeichert. Beim Zählen werden die Kinder des aktuellen Knotens gespeichert, so dass Zählung und Erkundung des Baumes gleichzeitig passieren.
Nun soll die Anzahl der Knoten in einem binären Baum gezählt werden. Die Klasse Node sieht wie folgt aus:

class Node:
    def init(self):
        self.parent = None
        self.left = None
        self.right = None

Der Algorithmus sollte eine Laufzeit von O(n) haben (n ist die Anzahl der Knoten im Baum).

Eingabe: Die Wurzel des binären Baums. Die Anzahl der Knoten im Baum ist zwischen 1 und 1000.

Ausgabe: Die Anzahl der Knoten im Baum. Folgedes ist eine mögliche Lösung mit Laufzeit O(n):

def count_nodes(root):
    if not root:
        return 0
    return 1 + count_nodes(root.left) + count_nodes(root.right)

Es wird rekursiv der linke und der rechte Zweig abgearbeitet und dabei cout_nodes hochgezählt