1291 tValues[1] = userObject; 1292 } 1293 else 1294 tValues = new Object[0]; 1295 s.writeObject(tValues); 1296 } 1297 1298 private void readObject(ObjectInputStream s) 1299 throws IOException, ClassNotFoundException { 1300 Object[] tValues; 1301 1302 s.defaultReadObject(); 1303 1304 tValues = (Object[])s.readObject(); 1305 1306 if(tValues.length > 0 && tValues[0].equals("userObject")) 1307 userObject = tValues[1]; 1308 } 1309 1310 private final class PreorderEnumeration implements Enumeration<TreeNode> { 1311 private final Stack<Enumeration<TreeNode>> stack = new Stack<>(); 1312 1313 public PreorderEnumeration(TreeNode rootNode) { 1314 super(); 1315 Vector<TreeNode> v = new Vector<TreeNode>(1); 1316 v.addElement(rootNode); // PENDING: don't really need a vector 1317 stack.push(v.elements()); 1318 } 1319 1320 public boolean hasMoreElements() { 1321 return (!stack.empty() && stack.peek().hasMoreElements()); 1322 } 1323 1324 public TreeNode nextElement() { 1325 Enumeration<TreeNode> enumer = stack.peek(); 1326 TreeNode node = enumer.nextElement(); 1327 @SuppressWarnings("unchecked") 1328 Enumeration<TreeNode> children = node.children(); 1329 1330 if (!enumer.hasMoreElements()) { 1331 stack.pop(); 1332 } 1333 if (children.hasMoreElements()) { 1334 stack.push(children); 1335 } 1336 return node; 1337 } 1338 1339 } // End of class PreorderEnumeration 1340 1341 1342 1343 final class PostorderEnumeration implements Enumeration<TreeNode> { 1344 protected TreeNode root; 1345 protected Enumeration<TreeNode> children; 1346 protected Enumeration<TreeNode> subtree; 1347 1348 public PostorderEnumeration(TreeNode rootNode) { 1349 super(); 1350 root = rootNode; 1351 children = root.children(); 1352 subtree = EMPTY_ENUMERATION; 1353 } 1354 1355 public boolean hasMoreElements() { 1356 return root != null; 1357 } 1358 1359 public TreeNode nextElement() { 1360 TreeNode retval; 1361 1362 if (subtree.hasMoreElements()) { 1363 retval = subtree.nextElement(); 1364 } else if (children.hasMoreElements()) { 1365 subtree = new PostorderEnumeration(children.nextElement()); | 1291 tValues[1] = userObject; 1292 } 1293 else 1294 tValues = new Object[0]; 1295 s.writeObject(tValues); 1296 } 1297 1298 private void readObject(ObjectInputStream s) 1299 throws IOException, ClassNotFoundException { 1300 Object[] tValues; 1301 1302 s.defaultReadObject(); 1303 1304 tValues = (Object[])s.readObject(); 1305 1306 if(tValues.length > 0 && tValues[0].equals("userObject")) 1307 userObject = tValues[1]; 1308 } 1309 1310 private final class PreorderEnumeration implements Enumeration<TreeNode> { 1311 private final Stack<Enumeration<? extends TreeNode>> stack = new Stack<>(); 1312 1313 public PreorderEnumeration(TreeNode rootNode) { 1314 super(); 1315 Vector<TreeNode> v = new Vector<TreeNode>(1); 1316 v.addElement(rootNode); // PENDING: don't really need a vector 1317 stack.push(v.elements()); 1318 } 1319 1320 public boolean hasMoreElements() { 1321 return (!stack.empty() && stack.peek().hasMoreElements()); 1322 } 1323 1324 public TreeNode nextElement() { 1325 Enumeration<? extends TreeNode> enumer = stack.peek(); 1326 TreeNode node = enumer.nextElement(); 1327 Enumeration<? extends TreeNode> children = node.children(); 1328 1329 if (!enumer.hasMoreElements()) { 1330 stack.pop(); 1331 } 1332 if (children.hasMoreElements()) { 1333 stack.push(children); 1334 } 1335 return node; 1336 } 1337 1338 } // End of class PreorderEnumeration 1339 1340 1341 1342 final class PostorderEnumeration implements Enumeration<TreeNode> { 1343 protected TreeNode root; 1344 protected Enumeration<? extends TreeNode> children; 1345 protected Enumeration<TreeNode> subtree; 1346 1347 public PostorderEnumeration(TreeNode rootNode) { 1348 super(); 1349 root = rootNode; 1350 children = root.children(); 1351 subtree = EMPTY_ENUMERATION; 1352 } 1353 1354 public boolean hasMoreElements() { 1355 return root != null; 1356 } 1357 1358 public TreeNode nextElement() { 1359 TreeNode retval; 1360 1361 if (subtree.hasMoreElements()) { 1362 retval = subtree.nextElement(); 1363 } else if (children.hasMoreElements()) { 1364 subtree = new PostorderEnumeration(children.nextElement()); |