c++ - C++ | 以漂亮的方式将树(不一定是二进制)打印到标准输出
问题描述
假设我有struct
这样的:
struct Node {
int val = 0;
std::vector<Node *> _children{};
};
我怎样才能stdout
以整洁漂亮的方式打印它?例如像tree
程序打印出目录结构的方式。
parent/
├── child1
│ ├── cchild1
│ ├── cchild2
│ ├── child3
│ │ └── child1
│ └── child4
│ ├── child1
│ └── child2
└── child2
└── cchild1
└── ccchild1
它不必完全按照上面的格式,因为我在这里并没有什么偏好。
这个问题与此不同,因为我想漂亮地打印一棵有多个孩子的树。
解决方案
通过修改此答案中的代码,我设法使其适用于具有多个孩子的 Tree
void Node::printSubtree(const std::string &prefix) {
using std::cout;
using std::endl;
if (_children.empty()) return;
cout << prefix;
size_t n_children = _children.size();
cout << (n_children > 1 ? "├── " : "");
for (size_t i = 0; i < n_children; ++i) {
Node *c = _children[i];
if (i < n_children - 1) {
bool printStrand = n_children > 1 && !c->_children.empty();
std::string newPrefix = prefix + (printStrand ? "│\t" : "\t");
std::cout << val << "\n";
c->printSubtree(newPrefix);
} else {
cout << (n_children > 1 ? prefix : "") << "└── ";
std::cout << val << "\n";
c->printSubtree(prefix + "\t");
}
}
}
void Node::printTree() {
using std::cout;
std::cout << val << "\n";
printSubtree("");
cout << "\n";
}
但是,欢迎新的解决方案。
推荐阅读
- python - 使用 REST API 和 Python 获取经过筛选的 vCenter VM 列表?
- c# - 为什么我不能分配这个自定义类型的属性?
- javascript - 如何正确执行对 MongoDB 客户端连接的查询
- python - 使用 Python Selenium 查找跨度标签的兄弟/父级
- libgit2 - pygit2/libgit2:它支持反向责备吗?
- javascript - 为什么 JSON.parse 无法解析这个 JSON 字符串:`{ "Search results: \":s\"": "" }`?
- c# - 从本地 .NET Web 应用程序提供预压缩 (brotli) 静态文件(Unity webgl 文件)
- c - 链接 llapacke 时遇到问题
- deep-learning - 神经网络学习对两个数字求和
- python - 为什么这个除法的结果返回一个整数而不是一个浮点数?