二叉树的创建和打印、。。。

作者在 2011-04-21 13:30:31 发布以下内容
#include <stdio.h>
#include <malloc.h>

typedef struct BitNode
{
     struct BitNode *lchild, *rchild;
     int level;
     char data;
}BitNode, *BiTree;

char s[100];
char *c = s;

void get_str()
{
     int i=0;

    while( (s[i++] = getchar()) != '\n' );
}

int CreateBiTree_GList(BiTree &T)
{  
     if (*c=='#')
     {
         ++c;
         T = NULL;
     }
     else
     {
         T = (BitNode*) malloc (sizeof(BitNode));
         T->data = *c;
         T->lchild = T->rchild = NULL;
        
        c++;//补充一个符号
         if (*c =='(')
         {
             c++;
             if (CreateBiTree_GList(T->lchild))
             {
                 printf("\t输入有错误\n");
             }
         }
         if (*c == ',')
         {
             c++;
             if (CreateBiTree_GList(T->rchild))
             {
                 printf("\t输入有错误\n");
             }
         }
         if (*c == ')')
         {
             c++;
         }
     }

    return 0;
}

void Inorder(BiTree bt)
{
     if (NULL != bt)
     {
         Inorder(bt->lchild);
         printf("%c ",bt->data);
         Inorder(bt->rchild);
     }
}
/*
void Inorder(BiTree bt)
{
     int i;
    
     if (NULL != bt)
     {
         Inorder(bt->rchild);
         printf("\t_________________\n\t");

        for (i=1; i<=4; ++i)
         {
             printf("| %c ", (i==bt->level)? bt->data: ' ' );
         }
         printf("|\n");
        
        Inorder(bt->lchild);
     }
}
*/
int main(void)
{
     int t;
     BiTree b;
     //建立二叉树
     b=(BiTree)malloc(sizeof(BitNode));
     get_str();
     t=CreateBiTree_GList(b);

    Inorder(b);//按右根左遍历二叉树
     printf("\t_________________\n\t");
     printf("\n");


    return 0;
}
#include <stdio.h>
#include <malloc.h>

typedef struct BitNode
{
struct BitNode *lchild, *rchild;
int level;
char data;
}BitNode, *BiTree;

char s[100];
char *c = s;

void get_str()
{
int i=0;

while( (s = getchar()) != '\n' );
}

int CreateBiTree_GList(BiTree &T)
{
if (*c=='#')
{
++c;
T = NULL;
}
else
{
T = (BitNode*) malloc (sizeof(BitNode));
T->data = *c;
T->lchild = T->rchild = NULL;

c++;//补充一个符号
if (*c =='(')
{
c++;
if (CreateBiTree_GList(T->lchild))
{
printf("\t输入有错误\n");
}
}
if (*c == ',')
{
c++;
if (CreateBiTree_GList(T->rchild))
{
printf("\t输入有错误\n");
}
}
if (*c == ')')
{
c++;
}
}

return 0;
}

void Inorder(BiTree bt)
{
if (NULL != bt)
{
Inorder(bt->lchild);
printf("%c ",bt->data);
Inorder(bt->rchild);
}
}
/*
void Inorder(BiTree bt)
{
int i;

if (NULL != bt)
{
Inorder(bt->rchild);
printf("\t_________________\n\t");

for (i=1; i<=4; ++i)
{
printf("| %c ", (i==bt->level)? bt->data: ' ' );
}
printf("|\n");

Inorder(bt->lchild);
}
}
*/
int main(void)
{
int t;
BiTree b;
//建立二叉树
b=(BiTree)malloc(sizeof(BitNode));
get_str();
t=CreateBiTree_GList(b);

Inorder(b);//按右根左遍历二叉树
printf("\t_________________\n\t");
printf("\n");


return 0;
}
此贴为本人应用他人,主要是留给自己以后看的
二叉树的创建和打印、。。。
创建二叉树,要求是递归算法,输入形式为类似A(B(#,D),C(E,#)),#表示空子树。
打印:按树状打印
下面是我的算法,貌似创建部分有误,不能输出正确结果,求助、、、
#include <stdio.h>
#include <stdlib.h>

typedef struct BitNode
{
char data;
int level;
struct BitNode *lchild,*rchild;
}BitNode,*BiTree;

int CreateBiTree_GList( BiTree &T)//由广义表形式的输入建立二叉链表
{ char c;

c=getchar();
if(c=='#') T=NULL; //空子树
else
{
T=(BitNode*)malloc(sizeof(BitNode));
T->data=c;
if(getchar()!='(') return 1;
if(!CreateBiTree_GList(T->lchild)) return 1;

if(getchar()!=',') return 1;
if(!CreateBiTree_GList(T->rchild)) return 1;

if(getchar()!=')') return 1; //这些语句是为了保证输入符合A(B,C)的格式
}
return 0;
}//CreateBiTree_GList

void Inorder(BiTree bt)
{
int i;
if(bt!=NULL)//按右根左遍历二叉树
{
Inorder(bt->rchild);
printf("\t_________________\n\t");
for(i=1;i<=4;i++)
printf("| %c ",(i==bt->level)?bt->data:' ');
printf("|\n");

Inorder(bt->lchild);
}

}

int main()
{

int t;
BiTree b;
//建立二叉树
b=(BiTree)malloc(sizeof(BitNode));
t=CreateBiTree_GList(b);

Inorder(b);//按右根左遍历二叉树
printf("\t_________________\n\t");
printf("\n");

return 0;
}
默认分类 | 阅读 991 次
文章评论,共0条
游客请输入验证码
浏览70060次