有没有办法访问C++ Boost rtree 中的非叶节点
Is there a way to access non leaf nodes in a C++ Boost rtree
提前抱歉,这是一个非常具体的问题,我无法提供任何代码,因为这是为了我的工作,因此是保密的。
我正在使用 Boost R 树,我需要实现的算法需要访问树的非叶节点。使用 Boost rtree 库,我只能以简单的方式访问叶节点。我注意到有一个功能可以打印所有节点,包括非叶节点(这意味着它们存在,它们是计算的(,以及它们的位置、它们在树中的级别等,但我无法以与叶节点相同的方式访问它们。
目前,我拥有的最佳解决方案是为树实现一个访问者并重载运算符 (( 来收集节点(这就是 print 方法访问节点的方式(。
我的问题是,有没有人知道一种更简单的方法来访问非叶节点?因为这个似乎效率不高,而且每次我想访问非叶节点时,我都会浪费时间。此外,我需要复制没有点的树的结构,如果我无法访问非叶节点,我就无法做到这一点。
提前谢谢你!
我不知道你到底想做什么,所以这将是一个一般性的答案。
为了首次访问树节点,您必须遍历树结构。在 Boost.Geometry 中,rtree 访问者模式用于此目的。您可以手动执行此操作,但在内部使用Boost.Variant 来表示节点,因此您最终会得到变体访问者。此时,您有几个选项,具体取决于您将如何处理节点。你要修改 r 树吗?rtree 会在内存中移动吗?节点的地址会改变吗?您将访问多少个节点?是否要存储对节点的某种引用并从该点遍历树结构?您想向下还是向上遍历结构?
您注意到的一个选项是每次遍历树结构。如果树结构可以更改,这是一个很好的方法。明显的缺点是您必须使用某种条件检查每个节点上的所有子节点(无论您做什么才能选择感兴趣的节点(。
如果树结构没有更改,但树被复制到内存中的其他位置,则可以将节点表示为从根到感兴趣节点的路径,作为子节点的索引列表。 例如,列表 {1, 2, 3} 含义:使用根节点的子节点 1 遍历树, 然后在下一级选择子节点 2,然后您的节点将是下一级的子节点 3。在这种情况下,您仍然需要遍历树,但不必再次检查条件。
如果树没有更改并且节点保留在内存中的同一位置,则可以简单地使用指针或引用。
- 反向给定链表中的K节点
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 为什么我的删除节点函数实际上没有删除节点?
- 我们可以删除链表中静态内存中的节点吗
- 如何在pugixml中获取节点的内部XML
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 有没有办法访问C++ Boost rtree 中的非叶节点
- 具有最大不同节点的根到叶路径
- 是否有任何函数可以从 wxtreelistctrl 获取所有选定的叶节点
- 创建一个函数,该函数返回一个新的相同二叉树,并向所有预先存在的叶添加新节点
- 分支和叶节点的独立类
- 试图验证表达式树中的叶节点
- 在二进制搜索树中查找最深级别的左叶节点
- 如何返回一个boost::property_tree的叶节点