http://articles.leetcode.com/2010/09/how-to-pretty-print-binary-tree.html
简化版本的C++
const int box_size = 3;
std::queue q;
q.push(m_root);
size_t current_level_nodes = 1;
size_t next_current_level_nodes = 0;
size_t level = 1;
int padding = box_size * (std::pow(2, Height() - level) - 1);
std::cout << std::setw(padding / 2) << "";
while (level <= Height())
{
std::cout << std::setw(box_size);
if (q.front() != NULL)
{
std::cout <<q>get_val();
q.push(q.front()->get_left());
q.push(q.front()->get_right());
}
else
{
std::cout << "";
q.push(NULL);
q.push(NULL);
}
next_current_level_nodes += 2;
std::cout << std::setw(padding) << "";
q.pop();
--current_level_nodes;
if (current_level_nodes == 0)
{
current_level_nodes = next_current_level_nodes;
next_current_level_nodes = 0;
++level;
padding = box_size * (std::pow(2, Height() - level) - 1);
std::cout << "\n" << std::setw(padding / 2) << "";
}
}