- #include <stdio.h>
- #include <malloc.h>
- #define MaxSize 100
- typedef char ElemType;
- typedef struct node
- {
- ElemType data;
- struct node *lchild;
- struct node *rchild;
- }BTNode;
- BTNode *CreateBTNode(char *str)
- {
- //str是二叉树的广义表表示的字符串
- //st是栈空间,b是新建二叉链表的根指针
- BTNode *St[MaxSize],*P = NULL,*b;
- int top = -1,k,j = 0;
- char ch;
- ch = str[j];
- //初始化的二叉链为空
- b = NULL;
- for (j = 0; str[j] != '\0';j ++)
- {
- ch = str[j];
- switch (ch)
- {
- //作为左结点
- case '(':
- top ++;
- St[top] = P;
- k =1;
- break;
- case ')':
- top --;
- break;
- //作为右结点
- case ',':
- k = 2;
- break;
- default:
- P = (BTNode *)malloc(sizeof(BTNode));
- P->data = ch;
- P->lchild = P->rchild = NULL;
- if (b == NULL)
- {
- // p指向二叉树的根结点
- b = P;
- }
- else
- {
- switch(k)
- {
- case 1:
- St[top]->lchild = P;
- break;
- case 2:
- St[top]->rchild = P;
- break;
- }
- }
- }
- }
- return b;
- }
- void DispBTNode(BTNode *b)
- {
- //打印用的队列
- BTNode *qu[MaxSize];
- BTNode *p;
- int front,rear,n;
- //初始化层号
- n = 0;
- front = rear =0;
- qu[rear ++] = NULL;
- p = b;
- if (p != NULL)
- {
- qu[rear ++] = p;
- }
- do
- {
- //出队队首指针
- p = qu[front ++];
- //出队指针为空
- if (p == NULL)
- {
- //队列中进入空指针作为分层标志
- qu[rear ++] = NULL;
- //层号加一
- n ++;
- printf("\n");
- }
- else
- {
- printf("(%d,,)",n,p->data);
- if (p->lchild != NULL)
- {
- qu[rear ++] = p->lchild;
- }
- if (p->rchild != NULL)
- {
- qu[rear ++] = p->rchild;
- }
- }
- } while (front != rear -1);
- }
- void main()
- {
- BTNode *b;
- b = CreateBTNode("A(B(D(G,H(J,K)),E),C(,F(,(I(M))))");
- printf("\n");
- printf("用分层的形式输出二叉树:\n");
- DispBTNode(b);
- printf("\n");
- }
转载于:https://blog.51cto.com/591819849/1100782