AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
ExpressionTreeTraversal.java
Go to the documentation of this file.
1package aud.example.expr;
2
3import aud.util.*;
4import aud.Queue;
5
8
9 protected ExpressionTree tree_ = null;
10 protected DotViewer viewer_ = DotViewer.displayWindow
11 ((String) null,"aud.example.expr.ExpressionTreeTraversal");
13
16 super("aud.example.expr.ExpressionTreeTraversal");
17 tree_=tree;
18 decorator=(SimpleDecorator) tree_.getDecorator(); // same per tree
19 }
20
21 @Override protected void onHalt() {
22 if (tree_!=null)
24 }
25
29 protected void output(ExpressionTree node) {
30 decorator.markNode(node);
33 halt("output "+node.getData()+" ["+node+"]");
34 }
36 protected void see(ExpressionTree node) {
37 decorator.markEdge(node);
38 }
39
45 public void traverse(String type) {
47 decorator.setGraphLabel("Traversal: ");
48
49 if (type.toLowerCase().startsWith("pre")) {
50 halt("START preorder traversal");
52 }
53 else if (type.toLowerCase().startsWith("in")) {
54 halt("START inorder traversal");
56 }
57 else if (type.toLowerCase().startsWith("post")) {
58 halt("START postorder traversal");
60 }
61 else if (type.toLowerCase().startsWith("level")) {
62 halt("START level-order traversal");
64 }
65 else
66 throw new RuntimeException("unknown traversal '"+type+"'");
67
69 halt("FINISHED");
70 }
71
73 protected void preorder(ExpressionTree node) {
74 if (node!=null) {
75 see(node);
76
77 output(node);
80 }
81 }
83 protected void inorder(ExpressionTree node) {
84 if (node!=null) {
85 see(node);
86
88 output(node);
90 }
91 }
93 protected void postorder(ExpressionTree node) {
94 if (node!=null) {
95 see(node);
96
99 output(node);
100 }
101 }
103 protected void levelorder(ExpressionTree root) {
105 queue.enqueue(null); // marker: next level
106 queue.enqueue(root);
107 int level=0; // keep track of/count levels
108 while (!queue.is_empty()) {
109 ExpressionTree node=queue.dequeue();
110
111 if (node==null) {
113 halt("enter next level "+(level++));
114 if (!queue.is_empty())
115 queue.enqueue(null); // marker: next level
116 }
117 else {
118 see(node);
119
120 if (node.getLeft()!=null)
121 queue.enqueue((ExpressionTree) node.getLeft());
122 if (node.getRight()!=null)
123 queue.enqueue((ExpressionTree) node.getRight());
124 output(node);
125 }
126 }
127 }
128
129 public static void main(String[] args) {
130
131 if (args.length<1 || args.length>2) {
132 System.err.println
133 ("usage: java aud.example.expr.ExpressionTreeTraversal expr [mode]\n"+
134 "- expr: an expression, e.g., \"2*(3+4)\" "+
135 "(use quotes \"...\" on command line!)\n"+
136 "- mode: preorder | inorder | postorder | levelorder");
137 System.exit(-1);
138 }
139
140 ExpressionTree tree=new ExpressionParser().parse(args[0]);
142
143 app.traverse(args.length>1 ? args[1] : "preorder");
144
145 app.halt("QUIT");
146 System.exit(0);
147 }
148}
BinaryTree< T > getLeft()
get left child or null
Definition: BinaryTree.java:86
T getData()
get node data
Definition: BinaryTree.java:81
BinaryTree< T > getRight()
get right child or null)
Definition: BinaryTree.java:88
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
ExpressionTree parse(String input)
parse input
example: visualize expression tree traversal
void inorder(ExpressionTree node)
recursive inorder traversal
void output(ExpressionTree node)
output node during traversal
void postorder(ExpressionTree node)
recursive postorder traversal
void levelorder(ExpressionTree root)
level order traversdal
void preorder(ExpressionTree node)
recursive preorder traversal
ExpressionTreeTraversal(ExpressionTree tree)
create traversal application for tree
void see(ExpressionTree node)
arrived node for first time (for visualization)
Tree representation of arithmetic expression.
GraphvizDecorator getDecorator()
get decoration or null
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
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.