diff --git a/vol6/src/main/java/ru/mifi/practice/vol6/tree/Main.java b/vol6/src/main/java/ru/mifi/practice/vol6/tree/Main.java index c668431..54fb5f2 100644 --- a/vol6/src/main/java/ru/mifi/practice/vol6/tree/Main.java +++ b/vol6/src/main/java/ru/mifi/practice/vol6/tree/Main.java @@ -1,5 +1,6 @@ package ru.mifi.practice.vol6.tree; +import ru.mifi.practice.vol6.tree.visitors.EulerPath; import ru.mifi.practice.vol6.tree.visitors.OnSubTree; import java.io.IOException; @@ -9,18 +10,23 @@ public abstract class Main { public static void main(String[] args) throws IOException { Tree tree = new ParserText().parse(Main.class.getResourceAsStream("/standard.tree"), Integer::parseInt, Comparator.comparing(k -> k)); - System.out.print("PRE : "); + System.out.print("PRE : "); tree.visit(new Visitor.Stdout<>(), new VisitorStrategy.PreOrder<>()); System.out.println(); - System.out.print("POST: "); + System.out.print("POST : "); tree.visit(new Visitor.Stdout<>(), new VisitorStrategy.PostOrder<>()); System.out.println(); - System.out.print("IN : "); + System.out.print("IN : "); tree.visit(new Visitor.Stdout<>(), new VisitorStrategy.InOrder<>()); System.out.println(); OnSubTree on = new OnSubTree<>(); tree.visit(on, new VisitorStrategy.PreOrder<>()); + System.out.println("TIMED: "); System.out.println(on); + EulerPath euler = new EulerPath<>(); + System.out.print("EULER: "); + tree.visit(euler, new VisitorStrategy.PreOrder<>()); + System.out.println(euler); System.out.println(tree); } } diff --git a/vol6/src/main/java/ru/mifi/practice/vol6/tree/visitors/EulerPath.java b/vol6/src/main/java/ru/mifi/practice/vol6/tree/visitors/EulerPath.java new file mode 100644 index 0000000..98d71bd --- /dev/null +++ b/vol6/src/main/java/ru/mifi/practice/vol6/tree/visitors/EulerPath.java @@ -0,0 +1,45 @@ +package ru.mifi.practice.vol6.tree.visitors; + +import ru.mifi.practice.vol6.tree.Node; +import ru.mifi.practice.vol6.tree.Visitor; + +import java.util.ArrayList; +import java.util.List; + +public final class EulerPath implements Visitor { + private final List> nodes = new ArrayList<>(); + + void clear() { + nodes.clear(); + } + + @Override + public void enterNode(Node node) { + if (node != null) { + nodes.add(node); + } + } + + @Override + public void exitNode(Node node) { + if (node != null) { + nodes.add(node); + } + } + + @SuppressWarnings("checked") + public List> path() { + return nodes; + } + + + @Override + public void empty() { + + } + + @Override + public String toString() { + return String.valueOf(nodes); + } +}