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);
}
我的代码似乎无法正常运行。有没有人有更好的递归解决方案,或者有人可以建议如何更改我当前的实现?
答案 0 :(得分:1)
这似乎可以解决问题。
void printTree(Node *root, int level) {
if (root == NULL)
return;
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("%s\n", root->data);
for (Node *child = root->children; child != NULL; child = child->next_sib) {
printTree(child, level + 1);
}
}
它没有实现max_level,我会留给你广告。
答案 1 :(得分:0)
一个明显的问题似乎是....你用max_level = 0调用recurse_helper():
recurse_helper(&root, 0,0);
你说的意思是打印出整个树,但是这行在recurse_helper()中:
if (level > max_level){
return;
}
将导致递归在第一次迭代后停止。第二次调用recurse_helper()将传入1表示级别,0表示max_level:
recurse_helper(&((r->children)->children), level+1, max_level);
所以你肯定需要专门考虑max_level = 0。
你没有描述你所看到的错误行为,但这肯定是一个问题。