【发布时间】:2018-07-12 16:03:53
【问题描述】:
struct Node {
char*label;
struct Node *children;
};
我正在尝试遍历树并根据当前深度打印节点的值/标签(如上定义)。
输出:
我的代码:
void recurse_helper(struct Node **root, int level, int max_level){
if (level > max_level){
return;
}
struct Node* r = *root;
if(r->children == NULL){
}
else{
struct Node *current = r->children;
}
void traverse_and_print(struct Node* root, max_dep){
recurse_helper(&root, 0,max_dep);
}
我的代码似乎无法正常工作。有没有人有更好的递归解决方案,或者有人可以推荐如何更改我当前的实现?
【问题讨论】:
-
您需要对树进行广度优先遍历。您可以轻松找到执行此操作的算法(在 SO 上,标签 breadth-first-search 有超过 1000 个问题)——它们通常涉及一个队列,该队列最初填充有根节点,并在遇到子节点时将其推送到该队列上。
-
起初我也认为是广度优先,但我认为他可能想要预购遍历,将子级缩进到父级下面而不是全部组合在一起。从他给出的例子中肯定不清楚。
-
在您的示例输出中,如果 firstkid 有一个孩子,您希望它直接打印在 firstkid 下方(但缩进),还是直接打印在 grandkid 上方?
-
@Stephen Docy 那个孩子将被缩进并且位于 firstkid 和 secondkid 之间。所以直接在firstkid下面。
-
@Stephen Docy 树的每一层都像一个链表,这就是兄弟姐妹存在的原因。那么我不是必须以某种方式追踪兄弟姐妹吗?