在C ++中垂直打印二叉树的优雅方式

时间:2014-08-04 05:03:07

标签: c++ tree

水平打印树更容易。一个简单的前序遍历就可以做到,例如:

└── 1
    ├── 6
    │   ├── *
    │   └── 4
    │       ├── 5
    │       └── 2
    │           ├── 3
    │           └── *
    └── 0

优雅的实现看起来像这样:

void print(Node* node, string indent, bool is_tail) {
  cout << indent << (is_tail ? "└── " : "├── ");
  if (node == nullptr) {
    cout << "*" << endl;
    return;
  }
  cout << node->val << endl;
  if (node->left != nullptr || node->right != nullptr) {
    indent.append(is_tail ? "    " : "│   ");
    print(node->right, indent, false);
    print(node->left, indent, true);
  }
}

然而,垂直打印树的代码似乎有点麻烦。知道如何打印这样的树吗?

       2               
      / \       
     /   \      
    /     \     
   /       \    
   7       5       
  / \       \   
 /   \       \  
 2   6       9   
    / \     /   
    5 8     4 

0 个答案:

没有答案