作者在 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[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 <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;
}