package include; import java.util.*; class Trunk { Trunk prev; String str; Trunk(Trunk prev, String str) { this.prev = prev; this.str = str; } }; public class PrintUtil { /** * Print a linked list * @param head */ public static void printLinkedList(ListNode head) { List list = new ArrayList<>(); while (head != null) { list.add(String.valueOf(head.val)); head = head.next; } System.out.println(String.join(" -> ", list)); } /** * The interface of the tree printer * This tree printer is borrowed from TECHIE DELIGHT * https://www.techiedelight.com/c-program-print-binary-tree/ * @param root */ public static void printTree(TreeNode root) { printTree(root, null, false); } /** * Print a binary tree * @param root * @param prev * @param isLeft */ public static void printTree(TreeNode root, Trunk prev, boolean isLeft) { if (root == null) { return; } String prev_str = " "; Trunk trunk = new Trunk(prev, prev_str); printTree(root.right, trunk, true); if (prev == null) { trunk.str = "———"; } else if (isLeft) { trunk.str = "/———"; prev_str = " |"; } else { trunk.str = "\\———"; prev.str = prev_str; } showTrunks(trunk); System.out.println(" " + root.val); if (prev != null) { prev.str = prev_str; } trunk.str = " |"; printTree(root.left, trunk, false); } /** * Helper function to print branches of the binary tree * @param p */ public static void showTrunks(Trunk p) { if (p == null) { return; } showTrunks(p.prev); System.out.print(p.str); } }