【发布时间】:2012-08-19 15:28:38
【问题描述】:
我正在查看此处提出的问题,但仅找到有关二叉树的答案。 我想按级别打印具有 0 - n 个孩子的树。 我知道孩子的数量,但我的代码不起作用
我想到的算法是:
- 打印根目录
- 打印所有子数据
- 为每个孩子
- 打印数据
但问题是我不知道在哪里停下来,当我递归尝试时,我失败了。
这是我写的函数:
void printBFS(myStruct s)
{
int i = 0;
printAllChildrenData(s);
for (i = 0; i < s->number_of_children; i++)
{
myStruct childCurr = getChildAtIndex(s, i);
printBFS(chilCurr);
}
}
我在这里搞砸了。
我希望功能是明确的:
printAllChildrenData 打印 S 的所有孩子的所有数据;它遍历子列表并打印出来。
编辑 例如,如果我有这棵树:
1
2 7 8
3 6 9 12
4 5 10 11
应该打印出来:
1 2 7 8 3 6 4 5 9 12 10 11
代替:
1 2 7 8 3 6 9 12 4 5 10 11
【问题讨论】:
-
关于停在哪里,所有的叶子都应该指向 null,这样你就知道它是一片叶子,你不能在树上走得更低,或者给叶子任何其他标志给叶子这样你就知道在哪里停下来了
-
它不会失败 - 它以不正确的顺序打印它。它打印所有第一个孩子 - 但是当它到达第一个孩子并递归发送时 - 它也开始打印它的孩子......以及孩子的孩子......
-
是的,我看到了所有这些并自己尝试过,但那里只有 post\pre oreder,而不是 level-order
-
如果您想打印每个级别,您需要一个队列来帮助您。看这里:en.wikipedia.org/wiki/Breadth-first_search
标签: c data-structures tree