我想在二叉树上创建一个迭代器,以便能够使用基于范围的 for 循环。我知道我应该先实现 begin() 和 end() 函数。
开始应该可能指向根。然而,根据规范,end() 函数返回“最后一个有效元素之后的元素”。那是哪个元素(节点)?指向一些“无效”的地方不是违法的吗?
另一件事是运算符++。在树中返回“下一个”元素的最佳方法是什么?我只需要一些建议来开始这个编程。
我想扩展/增加我的问题*。如果我想遍历具有任意数量的树怎么办?让每个节点都有一个子节点向量,并让 begin() 指向“真正的”根。我可能必须在迭代器类中实现一个队列(对于广度优先)来将 unique_ptr 存储到节点,对吧?然后,当队列为空时,我会知道我已经通过了所有节点,因此应该在调用 oprator++() 时返回 TreeIterator(nullptr)。是否有意义?我希望它尽可能简单并且只向前迭代。
*或者我应该创建一个新线程?