diff --git a/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java index 03420f2..8782e2e 100644 --- a/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java +++ b/05/src/main/java/ch/zhaw/ads/SortedBinaryTree.java @@ -71,16 +71,18 @@ public class SortedBinaryTree> implements Tree { } public Traversal traversal() { - // to be implemented + return new TreeTraversal(root); } protected int calcHeight(TreeNode node) { // to be implemented + return 0; } protected int calcSize(TreeNode p) { // to be implemented + return 0; } public int height() { diff --git a/05/src/main/java/ch/zhaw/ads/TreeTraversal.java b/05/src/main/java/ch/zhaw/ads/TreeTraversal.java index 3eb53a0..8ba0910 100644 --- a/05/src/main/java/ch/zhaw/ads/TreeTraversal.java +++ b/05/src/main/java/ch/zhaw/ads/TreeTraversal.java @@ -1,5 +1,8 @@ package ch.zhaw.ads; +import java.util.LinkedList; +import java.util.Queue; + public class TreeTraversal> implements Traversal { private TreeNode root; @@ -8,16 +11,59 @@ public class TreeTraversal> implements Traversal { this.root = root; } + @Override public void inorder(Visitor vis) { - // to be done + inorder(root, vis); } + private void inorder(TreeNode node, Visitor visitor) { + if (node != null) { + inorder(node.left, visitor); + visitor.visit(node.element); + inorder(node.right, visitor); + } + } + + @Override public void preorder(Visitor vis) { - // to be done + preorder(root, vis); } + private void preorder(TreeNode node, Visitor visitor) { + if (node != null) { + visitor.visit(node.element); + preorder(node.left, visitor); + preorder(node.right, visitor); + } + } + + @Override public void postorder(Visitor vis) { - // to be done + postorder(root, vis); + } + + private void postorder(TreeNode node, Visitor visitor) { + if (node != null) { + postorder(node.left, visitor); + postorder(node.right, visitor); + visitor.visit(node.element); + } + } + + @Override + public void levelorder(Visitor vis) { + levelorder(root, vis); + } + + void levelorder(TreeNode node, Visitor visitor) { + Queue> q = new LinkedList>(); + if (node != null) q.offer(node); + while (!q.isEmpty()){ + node = q.remove(); + visitor.visit(node.element); + if (node.left !=null) q.offer(node.left); + if (node.right != null) q.offer(node.right); + } } } diff --git a/05/src/test/java/ch/zhaw/ads/TreeTest.java b/05/src/test/java/ch/zhaw/ads/TreeTest.java index 9026fa5..a912deb 100644 --- a/05/src/test/java/ch/zhaw/ads/TreeTest.java +++ b/05/src/test/java/ch/zhaw/ads/TreeTest.java @@ -60,4 +60,4 @@ class MyVisitor implements Visitor { public String toString() { return output.toString(); } -} \ No newline at end of file +}