package com.interview.books.fgdsb; import com.interview.leetcode.utils.TreeNode; import java.util.LinkedList; import java.util.Queue; /** * Created_By: stefanie * Date: 15-2-1 * Time: 下午10:16 */ public class NLC3_PrettyBSTPrinter { public void print(TreeNode root){ int height = maxHeight(root); int lastLayer = (int) Math.pow(2, height - 1); int total = 6 * lastLayer + 1; Queue<TreeNode> queue = new LinkedList(); if(root != null) queue.offer(root); int layer = 0; while(layer < height){ int layerSize = queue.size(); int space = total / (layerSize + 1); for(int i = 0; i < layerSize; i++){ printSpace(space); TreeNode node = queue.poll(); System.out.print(node == null? " " : node.val); queue.offer(node == null? null : node.left); queue.offer(node == null? null : node.right); } System.out.println(); layer++; } } private int maxHeight(TreeNode root){ if(root == null) return 0; else return Math.max(maxHeight(root.left), maxHeight(root.right)) + 1; } private void printSpace(int count){ for(int i = 0; i < count; i++) System.out.print(" "); } public static void main(String[] args){ NLC3_PrettyBSTPrinter printer = new NLC3_PrettyBSTPrinter(); TreeNode root = TreeNode.sampleBST(); printer.print(root); } }