我有一个像这样的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;并且增加它但它不会起作用,因为递归调用会重置它。
答案 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传递为零来调用该函数。