我想在我的Parametrized BinaryTree类中添加Bi-Directional Iterator(就像std :: set导出的Iterator),但是我无法使用任何算法。
二元树节点的简单结构是,它包含三个指针,左,右,父:
答案 0 :(得分:5)
使用给定的结构,您希望如下进行:
实际上,这实现了树的无堆栈有序遍历。如果您的树在迭代时没有被更改(不太可能的情况),或者您没有到父节点的链接,则可以在迭代器中显式维护堆栈。
答案 1 :(得分:1)
解决此问题的一个好方法可能是首先编写递归预订算法,而不使用模板,然后您可以从中创建模板化版本并实现正确的迭代器。
只是一个想法。
答案 2 :(得分:0)
您不能使用递归在C ++中实现迭代器,因为迭代器需要在返回结果之前从所有处理返回。
只有具有yield
概念的C#和Python等语言才能使用递归来创建迭代器。
您的迭代器需要维护一堆尚未访问的节点。
在我的头脑中,我认为算法类似于: