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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代时如何知道我在树的末尾?相关的知识,希望对你有一定的参考价值。

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

编辑

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

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

答案

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

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

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

另一答案

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

以上是关于迭代时如何知道我在树的末尾?的主要内容,如果未能解决你的问题,请参考以下文章

如何计算落在树的每个节点中的观察值

如何检查二叉树的右侧。在树中搜索项目

如何控制在树的展开行中可见哪些 GTK 小部件?

在树的节点上构建等价类的好数据结构是啥?

如何在树视图中获取子位置?

如何禁止TreeView.ExpandAll方法自动滚动到树的末尾?