递归树遍历

时间:2018-02-02 07:36:27

标签: c recursion struct tree

struct Node {
    char*label;
    struct Node *children;     
};

我正在尝试遍历树并根据当前深度打印节点的值/标签(如上所述)。

输出:

Output

我的代码:

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);

}

我的代码似乎无法正常运行。有没有人有更好的递归解决方案,或者有人可以建议如何更改我当前的实现?

2 个答案:

答案 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。

你没有描述你所看到的错误行为,但这肯定是一个问题。