code: def postorder_iter(self, filter_fn=None):
          
          stack = [(self, False)]
          while stack:
              node, state = stack.pop()
              if state:
                  if filter_fn is None or filter_fn(node):
                      yield node
              else:
                  stack.append((node, True))
                  if node._children:
                      stack.extend([(n, False) for n in node.children_reversed_iter()])
docs: From DendroPy
          Postorder traversal of the self and its child_nodes.  Returns self
          and all descendants such that a node's child_nodes (and their
          child_nodes) are visited before node.  Filtered by filter_fn:
          node is only returned if no filter_fn is given or if filter_fn
          returns True.