|
|
#2
寒风中的细雨2011-04-18 09:16
程序代码:#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; } |
创建二叉树,要求是递归算法,输入形式为类似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;
}
程序代码: