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