【问题标题】:iterative approach for tree traversal树遍历的迭代方法
【发布时间】:2014-05-10 08:11:21
【问题描述】:

谁能帮我出一个算法来迭代地遍历二叉树不使用任何其他数据结构,如堆栈

我在某处读到我们可以为每个节点设置一个名为visited 的标志,如果节点被访问但我的BinaryTreeNode 类没有定义visited 变量,则打开该标志。所以我不能做类似 node.left.visited = false 的事情

有没有其他的迭代遍历方式?

【问题讨论】:

    标签: algorithm binary-tree iteration


    【解决方案1】:

    一种选择是thread 二叉树。

    当某个节点指向NULL(无论是左还是右)时,使该节点指向其遍历中的下一个节点(前序、后序等)。这样一来,就可以一次迭代遍历整棵树。

    示例线程二叉树:

    注意,每个节点的左节点都指向小于它的最大值。并且每个节点的右节点都指向比它大的最小值。所以这给出了一个有序的遍历。

    【讨论】:

    • 谢谢。我将如何进行并实施相同的操作?这是否也需要为继任者和前任者提供额外的变量?我的BTNode只有三个变量,数据,左节点和右节点。
    • @JimZilla Here 是线程二叉树的 C 实现。它不需要树结构中的任何额外变量,也不需要后继和前任的额外变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2021-10-30
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多