打印树的节点

时间:2015-03-02 10:06:47

标签: c recursion printing tree

我有一个像这样的k-ary树:

struct node {
    int num;
    int data;
    struct node **kids;
}

我创建了一个函数来打印树节点的数据。

示例:

     a
   / | \
  b  c  d
 /
e

将打印:

a
b 
e
c
d

功能是:

void visit(struct node *head){
    int i;

    if (head == NULL)
        return;

    printf("%d\n", head->data);

    for (i = 0; i < head->num; i++)
        visit(head->kids[i]);

}

问题是,如何打印我打印的每个节点的级别。我试图声明一个变量int level = 0;并且增加它但它不会起作用,因为递归调用会重置它。

2 个答案:

答案 0 :(得分:1)

  

void visit(struct node * head){       static int i;

if (head == NULL)
    return;

printf("%d\n", head->data);
printf("Level : %d\n",i);
for (i = 0; i < head->num; i++)
    visit(head->kids[i]);
i = i + 1;

}

答案 1 :(得分:0)

将另一个参数传递给递归函数

void visit(struct node *head, int level){
    int i;

    if (head == NULL)
        return;

    printf("%d : %d\n",level, head->data);

    for (i = 0; i < head->num; i++)
        visit(head->kids[i], level + 1);

}

第一次,通过将level传递为零来调用该函数。