【问题标题】:In-order tree traversal for non-binary trees非二叉树的中序树遍历
【发布时间】:2014-05-21 08:57:22
【问题描述】:

对于比二叉树更宽的树,术语“中序遍历”是否具有明确的含义,或者“前”和“后”顺序是唯一有意义的 DFS 类型?我的意思是n>每个节点有 2 个孩子。
我猜对于n 来说,这甚至可能意味着在n/2 孩子之后进入“根”,但这是否曾经这样使用过?那么奇怪的n呢?

【问题讨论】:

    标签: tree tree-traversal


    【解决方案1】:

    仅当您将子集明确划分为左子和右子时,才能继续明确定义中序遍历。

    要看到这一点,请注意,如果我们展平树,中序遍历实际上是按照节点出现的顺序(或者等效地,如果我们凝视,节点出现的顺序)从左边开始越过树)。

    因此,对于n-ary 树,您将首先处理左子集,然后是父集和右子集。

    例如,考虑以下树:

    如果我们定义左孩子的集合是从左边开始的前2个孩子节点,右孩子的集合是最后一个节点,我们将得到以下中序遍历:

    14、15、5、16、17、18、6、19、2、20、21、7、8、9、3、10、1、11、12、4、 13

    选择左右子集的方法将取决于手头的问题。

    【讨论】:

    • 根为 7 的子树,不会是 20、7、21,而不是您键入的 20、21、7?
    • 请注意,我们将左子节点定义为“从左边算起的前 2 个子节点”(20、21 是从左边开始的前两个子节点)。也许这可以在答案中更清楚地说明。
    • 你说得对,我只是认为它只适用于超过 2 个子节点的节点。
    • 你的回答太棒了顺便说一句,我用它来为我写的一个 rust 库计划我自己的有序 DFS 遍历:github.com/asllop/socarel
    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    • 2020-01-15
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多