562191200 562191200
关注数: 59 粉丝数: 227 发帖数: 16,748 关注贴吧数: 62
关于横向建立二叉树,Create(T)结束时,提示空间无法written。 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef char Type; typedef struct Node //二叉树 { Type data; struct Node *LChild; struct Node *RChild; }Node,*Tree; typedef struct Node2 //队列 { Tree child; struct Node2 *next; }QueueNode; typedef struct { QueueNode *front; QueueNode *rear; }Queue; void InitQueue(Queue *Q);//队列初始化 void EnterQueue(Queue *Q,Tree x);//入队 void DeleteQueue(Queue *Q,Tree *x);//出队 void Initate(Tree T);//二叉树初始化 void Create(Tree T);//二叉树横向建立 void PreOrder(Tree T);//先序遍历 void InOrder(Tree T);//中序遍历 void PostOrder(Tree T);//后序遍历 void Parent(Tree T,Type x);//查询双亲节点 void LeftChild(Tree T,Type x);//查询左孩子 void RightChild(Tree T,Type x);//查询右孩子 void Visit(Tree T);//访问 void main() { int i; Tree T; T=(Tree)malloc(sizeof(Node)); Initate(T); Create(T); printf("2");//无法输出 PreOrder(T); } void InitQueue(Queue *Q) { Q->front=(QueueNode *)malloc(sizeof(QueueNode)); if(Q->front!=NULL) { Q->rear=Q->front; Q->front->next=NULL; } else printf("\n 溢出。 \n"); } void EnterQueue(Queue *Q,Tree x) { QueueNode *a; a=(QueueNode *)malloc(sizeof(QueueNode)); if(a!=NULL) { a->child=x; a->next=NULL; Q->rear->next=a; Q->rear=a; } } void DeleteQueue(Queue *Q,Tree *x) { QueueNode *N; if(Q->front!=Q->rear) { N=Q->front->next; Q->front->next=N->next; if(Q->rear==N) Q->rear=Q->front; *x=N->child; free(N); } else printf("\n队空。\n"); } void Initate(Tree T) { T=(Tree)malloc(sizeof(Node)); if(T!=NULL) { T->LChild=NULL; T->RChild=NULL; } else printf("\n溢出。 \n"); } void Create(Tree T) { int i=0; Tree Child,Parent; Type a; Queue *Q; InitQueue(Q); if((a=getchar())!='\n') { T->data=a; T->LChild=NULL; T->RChild=NULL; EnterQueue(Q,T); while((a=getchar())!='\n') { Child=(Tree)malloc(sizeof(Node)); Child->data=a; Child->LChild=NULL; Child->RChild=NULL; if(i%2==0) { DeleteQueue(Q,&Parent); if(a!=' ') { Parent->LChild=Child; EnterQueue(Q,Child); } } else { if(a!=' ') { Parent->RChild=Child; EnterQueue(Q,Child); } } i++; } } PreOrder(T); printf("1");//可以输出 } void Visit(Tree T) { printf("%c,",T->data); } void PreOrder(Tree T) { Visit(T); if(T->LChild!=NULL) PreOrder(T->LChild); if(T->RChild!=NULL) PreOrder(T->RChild); }
1 下一页