我创建了一个二叉树结构来存储有界的卷层次结构,以便更容易使用(更安全)我创建了两个迭代器来补充它:广度优先和深度优先。
广度优先迭代器本质上是底层QList的包装器。但是我被困在深度优先迭代器(仅双向)上,我可以处理树周围的实际迭代,我只是不知道如何创建一个过去的迭代器。
我不能只使用QList::end()
,因为无法保证最低级别的最右边节点也是整个树的最右边节点。我不愿意制作一个可以测试的'假'BVH节点,因为它会涉及大量的代码更改(可能是开销),让各种节点管理机制忽略假节点,并禁用很多树构建自动化(例如,假节点的父节点必须被告知它是叶子)。但如果这是唯一的方法 - 那么这是唯一的方法。
答案 0 :(得分:0)
简要地看了一下qlist.h,看来你将无法对两种迭代类型使用相同的end()。但是没关系 - 你可以使用空指针或静态虚拟或其他技术为你的第二个迭代方法创建一个end()迭代器。我不明白为什么这会影响大量其他代码(大多数代码应该只是引用end()而不知道它的实现细节。)
答案 1 :(得分:0)
你能不能只使用null
或类似的东西作为结束?这至少是我所期望的,例如对于链表结构。