⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sy6_1.c

📁 数据结构实验与学习指导
💻 C
字号:
/*二叉树的建立、递归遍历sy6_1.c*/
#include <stdio.h>
#include <alloc.h>
#define MAXSIZE 20
typedef struct btnode
{
   char cdata;
   struct btnode *lchild,*rchild;
}BTNode;
BTNode *Create_BiTree()/*二叉树的建立*/
{/*用辅助数组建立二叉树*/
   int i,j;
   char ch;
   BTNode *s,*t,*p[MAXSIZE];
   printf("输入顶点编号及信息,输入0和#结束:i,ch");
   scanf("%d,%c",&i,&ch);
   while(i!=0 &&ch!='#')/*建立二叉树的存储结构*/
      {s=(BTNode *)malloc(sizeof(BTNode));
       s->cdata=ch;
       s->lchild=s->rchild=NULL;
       p[i]=s;
       if(i==1) t=s;/*判断输入结点是根结点、左孩子还是右孩子*/
       else
         {j=i/2;
          if(i%2==0) p[j]->lchild=s;
          else p[j]->rchild=s;
         }
       printf("输入顶点编号及信息,输入0和#结束:i,ch");
       scanf("%d,%c",&i,&ch);
   }
   return t;
}/* Create_BiTree1*/
void  Preorder(BTNode *bt)
{/*前序递归遍历*/
    if(bt)
    {
          printf("%c",bt->cdata);
          Preorder(bt->lchild);
        Preorder(bt->rchild);
    }
}/* Preorder*/
void  Inorder(BTNode *bt)
{/*中序递归遍历*/
    if(bt)
    {
       Inorder(bt->lchild);
        printf("%c",bt->cdata);
       Inorder(bt->rchild);
    }
}/* Inorder*/
void  Postorder(BTNode *bt)
  {/*后序递归遍历*/
        if(bt)
     {
           Postorder(bt->lchild);
           Postorder(bt->rchild);
            printf("%c",bt->cdata);
     }
   }/* Postorder*/
void LevelOrder(BTNode *bt) /*层次遍历二叉树bt*/    
    { BTNode* queue[MAXSIZE];
      int front,rear;
      if (bt==NULL) return;
      front=0;      /*非循环队列*/
      rear=0;
      queue[rear++]=bt;
      while(front!=rear)
          {printf("%c",queue[front]->cdata);        /*访问队首结点的数据域*/
             if (queue[front]->lchild!=NULL)   /*将队首结点的左孩子指针入队列*/
             {  queue[rear]=queue[front]->lchild;rear++;
             }
            if (queue[front]->rchild!=NULL)   /*将队首结点的右孩子指针入队列*/
            {  queue[rear]=queue[front]->rchild; rear++;
         }
      front++;
   } /* while */
}/* LevelOrder*/
void main()
{
  int i,j=1;
  BTNode *t;
  t=Create_BiTree();
  while(j)
   {
     printf("\n"); /*功能菜单*/
     printf("请选择操作:\n");
     printf("1:  二叉树的前序遍历\n");
     printf("2:  二叉树的中序遍历\n");
     printf("3:  二叉树的后序遍历\n");
     printf("4:  二叉树的层次遍历\n");
     printf("0:  退出程序\n");
     scanf("%d",&j);
     switch(j)
     {
         case 0: printf(" 程序退出!\n ");exit(0);
         case 1: printf("前序遍历结果:\n"); Preorder(t);
                  break;
         case 2: printf("中序遍历结果:\n"); Inorder(t);
                  break;
         case 3: printf("后序遍历结果:\n"); Postorder(t);
                  break;
         case 4: printf("按层遍历结果:\n");
                  LevelOrder(t);break;
         default : printf("\n输入无效,请重新选择操作!\n" );break;
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -