红色黑色树在C中按水平顺序打印

时间:2012-01-07 13:14:45

标签: c red-black-tree

我在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)

1 个答案:

答案 0 :(得分:4)

你可以做一个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)