具有递归功能的打印树

时间:2012-11-26 09:59:16

标签: c recursion

我的目标是:当我输入“e c d g a f b”时,输出为

e

(\t) c                <- first left node

(\t)(\t) a            <- second left node

(\t)(\t)(\t) b        <- third right node

(\t)(\t) d            <- second right node

(\t) g                <- first right node

(\t)(\t) f            <- second left node

但我不能按预期工作。

这是Brian W. Kernighan和Dennis M. Ritchie的“C编程语言”中的一个例子。

我改变了我的功能,我怎么能在输出窗口看到\ t。

我的尝试:

void prt(AW *p)
{
int j;
int temp;

if(p != NULL)
{   
          temp = judge;

    while(1)
    {   temp = temp / 2;
        count++;
        if(temp == 0)
            break;
    }

    for(j=1; j<count; j++)
        putchar('\t');
    printf("%-16s\n",p->word);

    count=0;

    if(p->left != NULL)judge++;
    prt(p->left);       

    if(p->right != NULL)judge++;
    prt(p->right);      }

}

1 个答案:

答案 0 :(得分:3)

假设您在下面有这样的结构。

typedef struct
{
int data;
struct node * left;
struct node *right;
} node; 



 void printtreenode(node *root)
    {
    if(root == NULL)
      return;
    printtreenode(root -> left);
    printf("%d\n",root -> data);
    printtreenode(root ->right);
    }

无需向printtreenode传递2个参数,也可以看到它是递归的。 这应该有效,您可以根据格式化的输出进行修改。