【问题标题】:Red Black tree print in level order in C在C中按级别顺序打印红黑树
【发布时间】:2012-02-04 21:33:34
【问题描述】:

我已经在 c 中完成了一棵红黑树,我发现很难按级别顺序打印它。我有一个打印顺序,但我无法想象我应该如何在控制台打印中将它显示为树。可行吗?我们可以在这里实现 BFS 或 DFS 吗?我在 wiki 中找到了一个算法,但我无法应用它。 如果有人有 C 语言的代码,你能把它贴在这里让我研究吗? 来自维基:

levelorder(root) 
  q = empty queue
  q.enqueue(root)
  while not q.empty do
    node := q.dequeue()
    visit(node)
    if node.left ≠ null
      q.enqueue(node.left)
    if node.right ≠ null
      q.enqueue(node.right)

【问题讨论】:

  • 这是作业吗?如果是请标记。
  • 好吧,红黑树是做作业的。以那种形式打印它不是。它只适合我:)

标签: c red-black-tree


【解决方案1】:

你可以做一个 BFS,但做一个iterative deepening search 可能更容易,因为这样可以省去在 C 中实现 FIFO 队列的麻烦。伪代码:

algorithm iterative-deepening(root)
    D = max-depth(root)
    for d=0 to D
        depth-limited-search(root, d)

/* variant of DFS */
algorithm depth-limited-search(node, d)
    if node != NULL
        if d == 0
            print node.contents
        else
            depth-limited-search(node.left, d - 1)
            depth-limited-search(node.right, d - 1)

【讨论】:

  • 那么我怎样才能找到 RBT 的最大深度?插入数据时是否必须以某种方式添加计数器?
  • @GeoPapas:有很多选项可以获取深度。请注意,红黑树的属性保证某个最大深度是元素数量的函数。你也可以做一个 DFS。
  • 所以我可以让一棵树从根到叶子(左右子节点等于空)并计算我遇到的节点。那应该给出一个大概的高度吧?
  • @GeoPapas:然后进行适当的算术运算,因为您需要深度的上限,而不是下限(否则您不会打印整个树)。但是,是的,这会起作用。
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 2023-03-29
  • 1970-01-01
  • 2012-10-22
  • 2012-09-16
  • 1970-01-01
  • 2021-07-10
  • 2011-08-20
相关资源
最近更新 更多