【问题标题】:Printing the nodes of a tree打印树的节点
【发布时间】:2015-03-02 10:06:46
【问题描述】:

我有一个像这样表示的 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;并增加它,但它不会工作,因为递归调用会重置它。

【问题讨论】:

  • 只需将level + 1 作为参数传递给递归调用
  • 您当前的函数visit不应该将您的示例树打印为a b e c d而不是a b c d e吗?
  • 成功了。谢谢!
  • 顺便说一句,您的函数确实按深度遍历,而不是按宽度遍历,因此输出不会如图所示。
  • 是否可以编辑我的函数并按宽度遍历?

标签: c recursion printing tree


【解决方案1】:

void 访问(结构节点 *head){ 静态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;

}

【讨论】:

    【解决方案2】:

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

    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 传递为零来调用函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2016-01-22
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多