打印二叉树代码
1 BinarTreeInfo
package com.xk.algorithm.tree.binary.printer; public interface BinaryTreeInfo { /** * who is the root node */ Object root(); /** * how to get the left child of the node */ Object left(Object node); /** * how to get the right child of the node */ Object right(Object node); /** * how to print the node */ Object string(Object node); }
2 BinaryTrees
package com.xk.algorithm.tree.binary.printer; /** * * @author MJ Lee * */ public final class BinaryTrees { private BinaryTrees() { } public static void print(BinaryTreeInfo tree) { print(tree, null); } public static void println(BinaryTreeInfo tree) { println(tree, null); } public static void print(BinaryTreeInfo tree, PrintStyle style) { if (tree == null || tree.root() == null) return; printer(tree, style).print(); } public static void println(BinaryTreeInfo tree, PrintStyle style) { if (tree == null || tree.root() == null) return; printer(tree, style).println(); } public static String printString(BinaryTreeInfo tree) { return printString(tree, null); } public static String printString(BinaryTreeInfo tree, PrintStyle style) { if (tree == null || tree.root() == null) return null; return printer(tree, style).printString(); } private static Printer printer(BinaryTreeInfo tree, PrintStyle style) { if (style == PrintStyle.INORDER) return new InorderPrinter(tree); return new LevelOrderPrinter(tree); } public enum PrintStyle { LEVEL_ORDER, INORDER } }
3 Files
package com.xk.algorithm.tree.binary.printer; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; public class Files { public static void writeToFile(String filePath, Object data) { writeToFile(filePath, data, false); } public static void writeToFile(String filePath, Object data, boolean append) { if (filePath == null || data == null) return; try { File file = new File(filePath); if (!file.exists()) { file.getParentFile().mkdirs(); file.createNewFile(); } try (FileWriter writer = new FileWriter(file, append); BufferedWriter out = new BufferedWriter(writer) ) { out.write(data.toString()); out.flush(); } } catch (Exception e) { e.printStackTrace(); } } }
InorderPrinter
public class InorderPrinter extends Printer { private static String rightAppend; private static String leftAppend; private static String blankAppend; private static String lineAppend; static { int length = 2; rightAppend = "┌" + Strings.repeat("─", length); leftAppend = "└" + Strings.repeat("─", length); blankAppend = Strings.blank(length + 1); lineAppend = "│" + Strings.blank(length); } public InorderPrinter(BinaryTreeInfo tree) { super(tree); } @Override public String printString() { StringBuilder string = new StringBuilder( printString(tree.root(), "", "", "")); string.deleteCharAt(string.length() - 1); return string.toString(); } private String printString( Object node, String nodePrefix, String leftPrefix, String rightPrefix) { Object left = tree.left(node); Object right = tree.right(node); String string &#