一個調的很好的打印二叉樹的代碼。
用空格和^v來表示節點之間的關系。
效果是這樣:
Binary Tree:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?v7v ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? v6v ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^5^ ? ? ??
? ? ? ?H4H ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?v3v ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ^2^ ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?^1^ ?
?
對于每個節點,先打印右子樹,然后打印本身,然后打印左子樹。
?
public class fan {public static class Node {public int value;Node left;Node right;public Node(int data) {this.value = data;}}public static void printTree(Node head) {System.out.println("Binary Tree:");printInOrder(head, 0, "H", 17);System.out.println();}public static void printInOrder(Node head, int height, String to, int len) {if (head == null) {return;}printInOrder(head.right, height + 1, "v", len);String val = to + head.value + to;int lenM = val.length();int lenL = (len - lenM) / 2;int lenR = len - lenM - lenL;val = getSpace(lenL) + val + getSpace(lenR);System.out.println(getSpace(height * len) + val);printInOrder(head.left, height + 1, "^", len);}public static String getSpace(int num) {String space = " ";StringBuffer buf = new StringBuffer("");for (int i = 0; i < num; i++) {buf.append(space);}return buf.toString();}public static void main(String[] args) {Node head = new Node(4);head.left = new Node(2);head.right = new Node(6);head.left.left = new Node(1);head.left.right = new Node(3);head.right.left = new Node(5);head.right.right = new Node(7);printTree(head);}}
?