《程序员代码面试指南》第三章 二叉树问题 较为直观的打印二叉树

题目

较为直观的打印二叉树

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);
    }
}
原文地址:https://www.cnblogs.com/lizhouwei/p/8832754.html