/examples/kilim/examples/Tree.java
http://github.com/kilim/kilim · Java · 82 lines · 53 code · 14 blank · 15 comment · 6 complexity · cd9739343a623f0476f18b47e0961fe1 MD5 · raw file
- /* Copyright (c) 2006, Sriram Srinivasan
- *
- * You may distribute this software under the terms of the license
- * specified in the file "License"
- */
- package kilim.examples;
- import kilim.Generator;
- import kilim.Pausable;
- /**
- * This example illustrates two 'generators' that walk a tree, one in pre-order
- * and another in post-order.
- *
- * A generator is an iterator that generates a value (in this
- * case the nodes of the tree) each time its execute() method
- * 'yields' a value.
- *
- * Also, @see kilim.examples.Fib
- */
- public class Tree {
- public String _val;
- Tree _left;
- Tree _right;
-
- public static void main(String[] args) {
- Tree t = new Tree("root",
- new Tree("a",
- new Tree("a1"),
- new Tree("a2")),
- new Tree("b",
- new Tree ("b1"),
- new Tree ("b2")));
- System.out.println("Pre-order traversal:");
- for (String s: new Pre(t)) {
- System.out.println(s);
- }
- System.out.println("Post-order traversal");
- for (String s: new Post(t)) {
- System.out.println(s);
- }
- }
-
- Tree(String s) {_val = s;}
-
- Tree(String s, Tree l, Tree r) {this(s); _left = l; _right = r;}
- }
- class Pre extends Generator<String> {
- Tree _t;
- Pre(Tree t) {_t = t;}
-
- public void execute() throws Pausable{
- walk(_t);
- }
-
- void walk(Tree t) throws Pausable {
- if (t == null) return;
- yield(t._val);
- walk(t._left);
- walk(t._right);
- }
- }
- class Post extends Generator<String> {
- Tree _t;
- Post(Tree t) {_t = t;}
-
- public void execute() throws Pausable {
- walk(_t);
- }
-
- void walk(Tree t) throws Pausable {
- if (t == null) return;
- walk(t._left);
- walk(t._right);
- yield(t._val);
- }
- }