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

问题描述 投票:0回答:2

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

编辑

这里的树结构应该是二进制trie,我需要inorder遍历来实现节点“keys”的词典顺序,我已经完成了递归版本 - 我正在尝试做迭代版本,因为很多其他函数遍历树和我不太确定如何编写通用的递归版本足以支持所有用途。

如果我最初的问题不准确,我很抱歉,你认为合适。

c++ algorithm tree trie
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.