package Standard; /** * 打印二叉树 * * Created by nibnait on 2016/9/15. */ public class PrintBinaryTree { private static final int NODE_LENGTH = 17; //二叉树中每个节点的长度 public static void print(Node head) { System.out.println("Binary Tree:"); printInOrder(head, 0, "*"); System.out.println(); } private static void printInOrder(Node head, int height, String to) { if (head == null){ return; } printInOrder(head.left, height+1, "~"); String val = to + head.value + to; int lenM = val.length(); int lenL = (NODE_LENGTH - lenM) / 2; int lenR = NODE_LENGTH - lenL - lenM; val = getSpace(height*NODE_LENGTH + lenL) + val + getSpace(lenR); System.out.println(val); printInOrder(head.right, height+1, "_"); } private static String getSpace(int n) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < n; i++) { sb.append(" "); } return sb.toString(); } public static void main(String[] args) { Node head = new Node(1); head.left = new Node(-222222222); head.right = new Node(3); head.left.left = new Node(Integer.MIN_VALUE); head.right.left = new Node(55555555); head.right.right = new Node(66); head.left.left.right = new Node(777); print(head); head = new Node(1); head.left = new Node(2); head.right = new Node(3); head.left.left = new Node(4); head.right.left = new Node(5); head.right.right = new Node(6); head.left.left.right = new Node(7); print(head); head = new Node(1); head.left = new Node(1); head.right = new Node(1); head.left.left = new Node(1); head.right.left = new Node(1); head.right.right = new Node(1); head.left.left.right = new Node(1); print(head); } }