非二叉树的中序树遍历

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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

以上是关于非二叉树的中序树遍历的主要内容,如果未能解决你的问题,请参考以下文章

为啥树的后根遍历对应二叉树的中序遍历

JS中的二叉树遍历

二叉树的中序遍历

二叉树的中序遍历

树的前序遍历与中序遍历构造二叉树和树的中序遍历与后序遍历构造二叉树

94. 二叉树的中序遍历