diff --git a/src/main/java/net/abhinavsarkar/algorist/AVLTree.java b/src/main/java/net/abhinavsarkar/algorist/AVLTree.java index 2d44854..62c58d1 100644 --- a/src/main/java/net/abhinavsarkar/algorist/AVLTree.java +++ b/src/main/java/net/abhinavsarkar/algorist/AVLTree.java @@ -48,7 +48,7 @@ public class AVLTree,V> implements Iterable,V> implements Iterable(this.root); } + public void renderToPNG(String fileName) throws IOException + { + TreeGraphvizVisitor visitor = new TreeGraphvizVisitor("AVLTree"); + this.root.accept(visitor); + visitor.renderToPNG(fileName); + } + private interface Node, V> { Node insert(K key, V val); @@ -59,6 +67,7 @@ public class BinarySearchTree,V> implements Iterable> accept(Visitor visitor); default ValueNode toValueNode() { if (this.isEmpty()) { @@ -238,6 +247,21 @@ public class BinarySearchTree,V> implements Iterable> accept(Visitor visitor) + { + String name = this.getName(); + visitor.visitNode(name); + this.left.accept(visitor).ifPresent(n -> visitor.visitLink(name, n.getName())); + this.right.accept(visitor).ifPresent(n -> visitor.visitLink(name, n.getName())); + return Optional.of(this); + } + + private String getName() + { + return this.key.toString(); + } } private static class EmptyNode,V> implements Node @@ -309,6 +333,12 @@ public class BinarySearchTree,V> implements Iterable"; } + + @Override + public Optional> accept(Visitor visitor) + { + return Optional.empty(); + } } private static StringBuilder gutter(int times) { @@ -442,7 +472,13 @@ public class BinarySearchTree,V> implements Iterable bst = new BinarySearchTree<>(); bst.insert("q", "barista"); @@ -474,6 +510,7 @@ public class BinarySearchTree,V> implements Iterable index = new AVLTree<>(true); - public AVLTreeGraphvizVisitor(String graphName) + public TreeGraphvizVisitor(String graphName) { this.graph = mutGraph(graphName).setDirected(true); }