在树数据结构中,逐级显示树节点

时间:2010-11-24 19:39:19

标签: c algorithm tree breadth-first-search

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

示例:

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

void PrintTree(struct tree *root);

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

  A
  B C
  D E F G

3 个答案:

答案 0 :(得分:3)

在SO上节省空间和时间:

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

答案 1 :(得分:3)

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

  • 两个队列
  • 杰克的方法略有改动

所以,从root开始。
把孩子放到第一个队列上 逐步完成它们,随时将他们的孩子带到第二个队列 切换到第二个队列,逐步完成,将他们的孩子推到第一个队列 打蜡,脱蜡。

真的只是对同一个想法的轻微扩展,广泛的第一次搜索或扫描,值得考虑作为模式,因为它适用于各种数据结构。事实上,几乎所有的东西都是树或特里,还有一些东西不是!

答案 2 :(得分:2)

此类访问称为广度优先级别订单。您可以看到其他信息here

基本上你

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

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

  • 推根
  • 直到队列为空
  • 获取第一个元素,访问它,并将其所有子节点推送到队列末尾
  • 重复