public TreeNode next() { TreeNode retval; if (subtree.hasNext()) { retval = subtree.next(); } else if (children.hasNext()) { subtree = new PostorderIterator(children.next()); retval = subtree.next(); } else { retval = root; root = null; } return retval; }
/** * Returns a depth first {@link Iterable}. This enables iterating * the subtree rooted at this node in post order within a foreach loop: * <pre> * for(TreeNode next:node.depthFirstIterator()){ * //...do something with next node * } * </pre> * * @return depthFirstIterable * @see TreeNode.PostorderIterator */ public Iterable<TreeNode> depthFirstIterator() { return new PostorderIterator(this); }