ADS-Praktika/06/src/main/java/ch/zhaw/ads/TreeTraversal.java
2020-11-01 23:52:08 +01:00

71 lines
1.7 KiB
Java

package ch.zhaw.ads;
import java.util.*;
public class TreeTraversal<T extends Comparable<T>> implements Traversal<T> {
private TreeNode<T> root;
public TreeTraversal(TreeNode<T> root) {
this.root = root;
}
private void inorder(TreeNode<T> node, Visitor<T> vis) {
if (node != null) {
inorder(node.left, vis);
vis.visit(node.element);
inorder(node.right, vis);
}
}
public void inorder(Visitor<T> vis) {
inorder(root, vis);
}
private void preorder(TreeNode<T> node, Visitor<T> vis) {
if (node != null) {
vis.visit(node.element);
preorder(node.left, vis);
preorder(node.right, vis);
}
}
public void preorder(Visitor<T> vis) {
preorder(root, vis);
}
private void postorder(TreeNode<T> node, Visitor<T> vis) {
if (node != null) {
postorder(node.left, vis);
postorder(node.right, vis);
vis.visit(node.element);
}
}
public void postorder(Visitor<T> vis) {
postorder(root, vis);
}
void levelorder(TreeNode<T> node, Visitor<T> visitor) {
Queue<TreeNode<T>> q = new LinkedList<TreeNode<T>>();
if (node != null) {
q.add(node);
}
while (!q.isEmpty()) {
node = q.remove();
visitor.visit(node.element);
if (node.left != null) {
q.add(node.left);
}
if (node.right != null) {
q.add(node.right);
}
}
}
public void levelorder(Visitor<T> vis) {
levelorder(root,vis);
}
}