AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
example/BinaryTreeTraversal.java
Go to the documentation of this file.
1package aud.example;
2
3import aud.BinaryTree;
4import aud.util.*;
5import aud.Queue;
6
12public class BinaryTreeTraversal extends SingleStepper {
13
14 protected MyTree tree_ = null;
15 protected DotViewer viewer_ = DotViewer.displayWindow
16 ((String) null,"aud.example.BinaryTreeTraversal");
18
20 public BinaryTreeTraversal(MyTree tree) {
21 super("aud.example.BinaryTreeTraversal");
22 tree_=tree;
23 decorator=(SimpleDecorator) tree_.getDecorator(); // same per tree
24 }
25
26 @Override protected void onHalt() {
27 if (tree_!=null)
29 }
30
32 static class MyTree extends BinaryTree<String> {
33 public MyTree(String data) { super(data); }
34 public MyTree(String data,MyTree left,MyTree right) {
35 super(data,left,right);
36 }
37
38 static final GraphvizDecorator decorator = new SimpleDecorator();
39 @Override public GraphvizDecorator getDecorator() {
40 return decorator;
41 }
42 }
43
45 public static MyTree exampleTree() {
46 MyTree root=new MyTree
47 ("A",
48 new MyTree("B",
49 new MyTree("C"),
50 new MyTree("D")),
51 new MyTree("E",
52 new MyTree("F"),
53 new MyTree("G",
54 new MyTree("H",
55 new MyTree("I",new MyTree("J"),null),
56 new MyTree("K")
57 ),
58 null
59 )
60 )
61 );
62 return root;
63 }
64
65
69 protected void output(MyTree node) {
70 decorator.markNode(node);
73 halt("output "+node);
74 }
76 protected void see(MyTree node) {
77 decorator.markEdge(node);
78 }
79
85 public void traverse(String type) {
87 decorator.setGraphLabel("Traversal: ");
88
89 if (type.toLowerCase().startsWith("pre")) {
90 halt("START preorder traversal");
92 }
93 else if (type.toLowerCase().startsWith("in")) {
94 halt("START inorder traversal");
96 }
97 else if (type.toLowerCase().startsWith("post")) {
98 halt("START postorder traversal");
100 }
101 else if (type.toLowerCase().startsWith("level")) {
102 halt("START level-order traversal");
104 }
105 else
106 throw new RuntimeException("unknown traversal '"+type+"'");
107
109 halt("FINISHED");
110 }
111
113 protected void preorder(MyTree node) {
114 if (node!=null) {
115 see(node);
116
117 output(node);
118 preorder((MyTree) node.getLeft());
119 preorder((MyTree) node.getRight());
120 }
121 }
123 protected void inorder(MyTree node) {
124 if (node!=null) {
125 see(node);
126
127 inorder((MyTree) node.getLeft());
128 output(node);
129 inorder((MyTree) node.getRight());
130 }
131 }
133 protected void postorder(MyTree node) {
134 if (node!=null) {
135 see(node);
136
137 postorder((MyTree) node.getLeft());
138 postorder((MyTree) node.getRight());
139 output(node);
140 }
141 }
143 protected void levelorder(MyTree root) {
144 Queue<MyTree> queue=new Queue<MyTree>();
145 queue.enqueue(null); // marker: next level
146 queue.enqueue(root);
147 int level=0; // keep track of/count levels
148 while (!queue.is_empty()) {
149 MyTree node=queue.dequeue();
150
151 if (node==null) {
152 halt("enter next level "+(level++));
153 if (!queue.is_empty())
154 queue.enqueue(null); // marker: next level
155 }
156 else {
157 see(node);
158
159 if (node.getLeft()!=null)
160 queue.enqueue((MyTree) node.getLeft());
161 if (node.getRight()!=null)
162 queue.enqueue((MyTree) node.getRight());
163 output(node);
164 }
165 }
166 }
167
168 public static void main(String[] args) {
171
172 if (args.length==0)
173 app.traverse("preorder");
174 else
175 for (String type : args)
176 app.traverse(type);
177
178 app.halt("QUIT");
179 System.exit(0);
180 }
181}
Simple binary tree.
Definition: BinaryTree.java:26
Implementation of AbstractQueue as a (dynamically resized) circular buffer based on array.
Definition: Queue.java:11
void enqueue(T x)
Enqueue element at end of queue.
Definition: Queue.java:62
boolean is_empty()
Is queue empty?
Definition: Queue.java:35
T dequeue()
Remove front element from queue.
Definition: Queue.java:50
example: visualize binary tree traversal
BinaryTreeTraversal(MyTree tree)
create traversal application for tree
void traverse(String type)
start traversal
void preorder(MyTree node)
recursive preorder traversal
void output(MyTree node)
output node during traversal
static MyTree exampleTree()
generate some tree
void postorder(MyTree node)
recursive postorder traversal
void see(MyTree node)
arrived node for first time (for visualization)
void inorder(MyTree node)
recursive inorder traversal
void levelorder(MyTree root)
level order traversdal
void setGraphLabel(String text)
set label
void clear()
Clear all decorations.
Simple viewer for Graphvizable.
Definition: DotViewer.java:48
void display(String code)
display dot code
Definition: DotViewer.java:108
Decorator for items of Graphvizable objects.
Example for a simple decorator.
void markEdge(GraphvizDecorable object)
void markNode(GraphvizDecorable object)
void highlightNode(GraphvizDecorable object)
Set highlighted node.
Simple framework for single stepping code.
void halt()
wait for user
void halt(String text, int timeout)
display text and wait for user or timeout
utilities (not related to AuD lecture)
Definition: Colormap.java:1
AuD lecture: Data structures, algorithms, examples.