树结构的通用遍历
Generic traversal of tree structure
我正在尝试编写我的树(嗯,这是二进制trie)遍历遍历更通用,因为现在的方式是我重复了非常相似的代码。
我在词典中散步树。我认为可以用通用树遍历抽象的功能的示例(在伪代码中):
items(node*, key, list&) {
if(node->value)
list.push({node->value, key})
if(node->left)
items(node->value, key + "0")
if(node->right)
items(node->value, key + "1")
}
draw(node*, id, ostream&) {
drawNode(node, id)
if (node->left)
drawLine(node, node->left, "0", ostream&)
draw(node->left, ++id, ostream&)
if (node->right)
drawLine(node, node->right, "1", ostream&)
draw(node->right, ++id, ostream&)
我不是在要求使用功能代码,而只是向正确的方向推动。将功能作为参数的模板应该完成吗?那更复杂的情况又如何简单地由单个左/右节点的存在来调节(两个Trie的合并似乎也像是该抽象的候选者)。
遍历的通用抽象是迭代器的合适形式。一旦遍历已成为线性序列,您就可以使用常规迭代器之一来制定它,这很可能是对双向介导器进行建模。当概括树的遍历(或更通用的图形)时,您可能会以不同的方向移动迭代操作。
死灵固定,但如果有人登上这个问题,仍然可能值得。
通用树遍历是由功能编程的理论家研究,最终为Haskell生成了几个可用的库。我将指出递归模板和SYB(废除边框)库。两者都有一篇描述方法的论文。
syb依赖于运行时反射的形式,并使用了很多类型的铸造/胁迫,但是递归式shemes被移植到包括Kotling和Scala在内的几种语言中,因此它们与命令式语言兼容。
这些作品绝不代表了类似树状数据架构的递归遍历可以完成的巅峰之作,但它们看到了一些用途,并且这些想法经过了充分的测试。
相关文章:
- 有什么方法可以遍历结构吗
- 遍历我的数据结构,并向其中输入随机值
- 结构化绑定:遍历元组的双端面
- 点遍历的最佳数据结构
- C++逐位增加指针遍历结构
- 如何使用指针遍历结构数组中的数组
- 我是否需要遍历升压 rtree 的层次结构才能实现最大效率?
- MessagePack C++-如何遍历未知的数据结构
- 如何调用遍历类层次结构的成员函数
- 树结构的通用遍历
- 如何遍历充满结构的数组
- C++,一个通用递归模板函数,用于遍历树状结构
- 提升 R 树是否支持层次结构遍历
- 按变量名遍历结构
- 在向量中遍历结构成员时出错
- 遍历结构元素向量
- 遍历内部带有结构的链表
- c++中带有向量的分层数据结构,可以自底向上和自顶向下遍历
- Libxmlrpc遍历结构体
- 设计数据结构来存储多键对象集,以便能够收集和遍历该集的超平面