题目
较为直观的打印二叉树
java代码
/**
* @Description:较为直观的打印二叉树
* @Author: lizhouwei
* @CreateDate: 2018/4/14 16:09
* @Modify by:
* @ModifyDate:
*/
public class Chapter3_3 {
public void printTree(Node head) {
recInOrder(head, 0, "H", 17);
}
//借助中序遍历 ,只将先遍历左子树 调整为先遍历右子树
private void recInOrder(Node head, int level, String filChar, int len) {
if (head == null) {
return;
}
recInOrder(head.right, level + 1, "v", len);
String value = filChar + head.value + filChar;
int lenM = value.length();
int lenL = (len - lenM) / 2;
int lenR = len - lenM - lenL;
System.out.println(getSpace(level * len) + getSpace(lenL) + value + getSpace(lenM));
recInOrder(head.left, level + 1, "^", len);
}
private String getSpace(int len) {
StringBuilder sb = new StringBuilder();
while (len-- > 0) {
sb.append(" ");
}
return sb.toString();
}
//测试
public static void main(String[] args) {
Chapter3_3 chapter = new Chapter3_3();
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Node head = NodeUtil.generTree(arr, 0, arr.length - 1);
chapter.printTree(head);
}
}