1. #include <stdio.h>  
  2. #include <malloc.h>  
  3.  
  4.    
  5.  
  6. #define MaxSize 100  
  7.  
  8. typedef char ElemType;  
  9.  
  10. typedef struct node  
  11. {  
  12.  ElemType data;  
  13.  struct node *lchild;  
  14.  struct node *rchild;  
  15. }BTNode;  
  16.  
  17.  
  18. BTNode *CreateBTNode(char *str)  
  19. {  
  20.  //str是二叉树的广义表表示的字符串  
  21.  //st是栈空间,b是新建二叉链表的根指针  
  22.  BTNode *St[MaxSize],*P = NULL,*b;  
  23.  int top = -1,k,j = 0;  
  24.  char ch;  
  25.  ch = str[j];  
  26.  //初始化的二叉链为空  
  27.  b = NULL;  
  28.  
  29.  for (j = 0; str[j] != '\0';j ++)  
  30.  {  
  31.   ch = str[j];  
  32.   switch (ch)  
  33.   {  
  34.   //作为左结点  
  35.   case '(':  
  36.    top ++;  
  37.    St[top] = P;  
  38.    k =1;  
  39.    break;  
  40.   case ')':  
  41.    top --;  
  42.    break;  
  43.   //作为右结点  
  44.   case ',':  
  45.    k = 2;  
  46.    break;  
  47.   default:  
  48.    P = (BTNode *)malloc(sizeof(BTNode));  
  49.    P->data = ch;  
  50.    P->lchild = P->rchild = NULL;  
  51.    if (b == NULL)  
  52.    {  
  53.     // p指向二叉树的根结点  
  54.     b = P;  
  55.    }  
  56.    else 
  57.    {  
  58.     switch(k)  
  59.     {  
  60.     case 1:  
  61.      St[top]->lchild = P;  
  62.      break;  
  63.     case 2:  
  64.      St[top]->rchild = P;  
  65.      break;  
  66.     }  
  67.    }  
  68.   }  
  69.  }  
  70.  return b;  
  71. }  
  72.  
  73.  
  74. void DispBTNode(BTNode *b)  
  75. {  
  76.  //打印用的队列  
  77.  BTNode *qu[MaxSize];  
  78.  BTNode *p;  
  79.  int front,rear,n;  
  80.  //初始化层号  
  81.  n = 0;  
  82.  front = rear =0;  
  83.  qu[rear ++] = NULL;  
  84.  p = b;  
  85.  if (p != NULL)  
  86.  {  
  87.   qu[rear ++] = p;  
  88.  }  
  89.  do 
  90.  {  
  91.   //出队队首指针  
  92.   p = qu[front ++];  
  93.   //出队指针为空  
  94.   if (p == NULL)  
  95.   {  
  96.    //队列中进入空指针作为分层标志  
  97.    qu[rear ++] = NULL;  
  98.    //层号加一  
  99.    n ++;  
  100.    printf("\n");  
  101.   }  
  102.   else 
  103.   {  
  104.    printf("(%d,,)",n,p->data);  
  105.    if (p->lchild != NULL)  
  106.    {  
  107.     qu[rear ++] = p->lchild;  
  108.    }  
  109.    if (p->rchild != NULL)  
  110.    {  
  111.     qu[rear ++] = p->rchild;  
  112.    }  
  113.   }  
  114.  } while (front != rear -1);  
  115. }  
  116.  
  117.  
  118. void main()  
  119. {  
  120.  BTNode *b;  
  121.  b = CreateBTNode("A(B(D(G,H(J,K)),E),C(,F(,(I(M))))");  
  122.  printf("\n");  
  123.  printf("用分层的形式输出二叉树:\n");  
  124.  DispBTNode(b);  
  125.  printf("\n");  
  126. }  
  127.