c言語作成と出力ツリー


ツリーの作成と出力には、標準的なc言語版とc++参照を加えたバージョンがあります(データ構造教材はこの方法が多く採用されているため、c言語版に比べて便利です)
c言語版:
                  
#include
#include
#include
typedef struct BTNode//      
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;


void create(BTNode **p)//     ,  '^'   
{
char a;
a=getchar();//12^3^^4^^     
if(a=='^')
*p=NULL;
else
{
*p=(BTNode *)malloc(sizeof(BTNode));
(*p)->data=a;
create(&((*p)->lchild));
create(&((*p)->rchild));
}
return;
}

void output(BTNode *p)//          
{
if(p)
{
printf("%c
",p->data); output(p->lchild); output(p->rchild); } } int main()// { BTNode *p=NULL; printf("please input data:"); create(&p); output(p); return 0; }
入力の際は注意が必要で、むやみに入力することはできません.ツリーの構造を考慮してください.
以下は、c++の参照が追加されたバージョンです.
#include
#include
#include
typedef struct BTNode//      
{
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;


void create(BTNode *&p)//     ,  '^'   
{
char a;
a=getchar();//12^3^^4^^     
if(a=='^')
p=NULL;
else
{
p=(BTNode *)malloc(sizeof(BTNode));
p->data=a;
create(p->lchild);
create(p->rchild);
}
return;
}

void output(BTNode *p)//          
{
if(p)
{
printf("%c
",p->data); output(p->lchild); output(p->rchild); } } int main()// { BTNode *p=NULL; printf("please input data:"); create(p); output(p); return 0; }