// Example 6.68 (Figure 6.6) import java.util.Iterator; import java.util.Stack; import java.util.NoSuchElementException; class TreeNode implements Iterable { TreeNode left; TreeNode right; T val; public Iterator iterator() { return new TreeIterator(this); } TreeNode(TreeNode l, TreeNode r, T v) { left = l; right = r; val = v; } TreeNode(T v) { left = null; right = null; val = v; } private class TreeIterator implements Iterator { private Stack> s = new Stack>(); TreeIterator(TreeNode n) { s.push(n); } public boolean hasNext() { return !s.empty(); } public T next() { if (!hasNext()) { throw new NoSuchElementException(); } TreeNode n = s.pop(); if (n.right != null) { s.push(n.right); } if (n.left != null) { s.push(n.left); } return n.val; } public void remove() { throw new UnsupportedOperationException(); } } public void print() { System.out.println(val.toString()); } } public class Tree { public static void main(String args[]) { TreeNode a = new TreeNode(1); TreeNode f = new TreeNode(6); TreeNode c = new TreeNode(f, null, 3); TreeNode d = new TreeNode(4); TreeNode b = new TreeNode(c, d, 2); TreeNode e = new TreeNode(a, b, 5); for (Iterator it = e.iterator(); it.hasNext();) { Integer i = it.next(); System.out.println(i); } System.out.println(""); for (Integer i : e) { System.out.println(i); } } }