水平打印树更容易。一个简单的前序遍历就可以做到,例如:
└── 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