在迭代时如何知道我在树的末尾?

时间:2017-12-19 01:18:01

标签: c++ algorithm tree trie

我正在编写(inorder)树结构的迭代器(左子指针,右子指针,父指针)而且我被卡住了,因为我无法想到一种停止迭代的方法当我已经访问过所有节点时如何检查我当前所在的节点是否是树的最后一个节点?

修改

这里的树结构应该是二元trie,我需要按顺序遍历来实现节点的按字典顺序"键"我已经完成了递归版本 - 我试图做迭代版本,因为很多其他函数遍历树,我不确定如何编写通用的递归版本足以支持所有用途。

对不起,如果我的初步问题不准确,请按照您的意愿进行投票。

2 个答案:

答案 0 :(得分:2)

如果您以递归方式执行此操作,这是算法中固有的,您不需要根据以下伪代码手动检查:

def processTree(node):
    if node == null: return
    processTree(node.left)
    print(node.value)
    processTree(node.right)

processTree(rootNode)

考虑处理最后一个节点的点,比如下面树中的7

    __1__
   /     \
  2       3
 / \     / \
4   5   6   7

此时,您已经处理了左侧和所有父母的所有内容,因此您只需升级树并退出。

答案 1 :(得分:-1)

一种方法是在搜索树之前计算节点总数,比如N.然后你可以使用size_t counter对它进行计数,即将counter的引用传递给递归调用用于树搜索,并在每个最终节点处执行++counter