【问题标题】:level order queue implemmentation in CC中的级别顺序队列实现
【发布时间】:2015-11-18 18:44:02
【问题描述】:

我了解使用队列逐级访问二叉搜索树中的节点的逻辑。 但是我试图在 C 中实现,但我被卡住了,因为我不知道如何正确地将它们排入队列。从根开始,我可以创建一个队列,但之后如果我将根的子节点添加到队列中,我将丢失这些新节点的子节点,因为每次添加新节点时我都会修改队列中的连接。

我可以创建一种新的数据类型,它在链表队列中还有一个要使用的链接,这应该可以工作。这里最好的方法是什么?

【问题讨论】:

  • 使用链表作为队列的容器。请阅读一本好的初级书籍,因为那里会详细介绍。
  • BST 和队列都是抽象数据类型。您不使用队列来创建 BST。

标签: c algorithm data-structures tree binary-search-tree


【解决方案1】:

逐级访问[ing]二叉搜索树中的节点

有一个名字:它被称为树的“广度优先”遍历。从一个空队列开始,您将根节点排入队列,然后反复将队列中的第一个节点排入队列,以某种方式对其进行处理,并将该节点的所有子节点排入队列,直到没有更多的节点排入队列。相对于该节点的其他处理,您应该何时将节点的子节点排入队列可能取决于您打算执行的处理,尤其是在涉及结构修改树的情况下。

只要每个节点的处理只能影响以当前节点为根的子树,这一切都很好。但是,如果您需要能够影响整个树的其他部分,那么广度优先遍历可能不适合您的任务。

你说

[I] 不知道如何正确地将它们排入队列。从根 [I] 开始可以创建一个队列,但之后如果 [I] 将根的子节点添加到队列 [I] 将丢失这些新节点的子节点,因为 [I] 每次都在修改队列中的连接是时候添加一个新节点了。

这里的关键概念是队列中的成员资格和位置与树中的成员资格和位置是分开且独立的。您可以通过向节点结构本身添加额外的链接来管理它,或者通过为包含指向排队 BST 节点的指针的队列元素创建一个新结构。后者将树与队列分离,包括我在内的许多人都认为这对于大多数用途来说更可取。

【讨论】:

  • 谢谢你为我澄清了事情。
猜你喜欢
  • 2021-12-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多