0

问题:我们如何逐级显示树节点?你能给我时间和空间有效的解决方案吗?

例子 :

    A
   / \
  B   C
 / \  / \
D   E F  G

void PrintTree(struct tree *root);

输出: 您必须逐级打印树节点

  A
  B C
  D E F G
4

3 回答 3

3

为了节省空间和时间:

http://thecodecracker.com/c-programming/bfs-and-dfs/

于 2010-11-24T20:10:29.023 回答
3

如果你感觉很野蛮,并且想非常简单地思考你所处的水平......
你将需要:

  • 两个队列
  • 杰克的方法略有变化

所以,从根开始。
将其子项添加到第一个队列中。
穿过他们,边走边把他们的孩子带到第二个队列。
切换到第二个队列,穿过,将他们的孩子推到第一个队列。
打蜡,脱蜡。

实际上,它只是对同一思想的轻微扩展,即广度优先搜索或扫描,作为一种模式值得考虑,因为它适用于各种数据结构。事实上,几乎任何东西都是一棵树或树,还有一些不是!

于 2010-11-24T20:48:56.947 回答
2

这种访问称为广度优先水平顺序。您可以在此处查看其他信息。

基本上你

  • 首先访问当前节点
  • 那么该节点的所有子节点
  • 然后每个孩子的所有孩子等等

这应该可以通过 FIFO 结构轻松实现:

  • 推根
  • 直到队列为空
  • 获取第一个元素,访问它,并将其所有子元素推到队列的末尾
  • 重复
于 2010-11-24T19:44:52.263 回答