注册 登录
编程论坛 闲聊灌水

每日灌水~

九转星河 发布于 2017-03-03 23:45, 56106 次点击
从忙碌的编程中解放出来~放松一下~休息~顺便灌水
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[此贴子已经被作者于2017-3-15 23:55编辑过]

768 回复
#352
九转星河2017-11-27 09:00
宜~煮茶~
#353
九转星河2017-11-28 09:04
宜~赖床~

[此贴子已经被作者于2017-11-28 09:06编辑过]

#354
九转星河2017-11-29 07:27
宜~换发型~
#355
九转星河2017-11-30 09:03
宜~抱一抱~
#356
九转星河2017-12-01 08:21
宜~开怀大笑~
#357
九转星河2017-12-02 06:09
宜~隐瞒~
#358
九转星河2017-12-03 09:07
宜~露怯~
#359
九转星河2017-12-04 07:14
宜~培养感情~
#360
炎天2017-12-04 22:48
宜~什么呢~
#361
九转星河2017-12-05 08:39
宜~穿新衣~
#362
炎天2017-12-05 21:28
宜~大笑~
#363
九转星河2017-12-06 07:35
宜~装深沉~
#364
炎天2017-12-06 16:35
宜~YY年度~
#365
九转星河2017-12-06 18:03
代码暂存~

程序代码:
# include <stdio.h>
# include <stdlib.h>

typedef int Etype;
typedef struct BiTNode  { /* 树结点结构 */
      Etype data;
      struct BiTNode *lch,*rch;
}BiTNode;
BiTNode *t;

/* 函数原形声明 */
BiTNode *creat_bt1();
BiTNode *creat_bt2();
void inorder(BiTNode *p);
void preorder(BiTNode *p);  //进阶
void afterorder(BiTNode *p);//进阶
int lookup(BiTNode *p,int e);  //进阶(可选)
void insert(BiTNode *p,int i,int e);  //进阶(可选),i为结点编号,e为值(不能原有值重复)
void dele (BiTNode *p,int e);  //进阶(可选)
void numb(BiTNode *p);

int n,n0,n1,n2;


/*  主函数 */
main(){

  char ch; int k;
  do { printf("\n");
       printf("\n\n     1. 建立二叉树方法1 ");
       printf("\n\n     2. 建立二叉树方法2");
       printf("\n\n     3. 中序递归遍历二叉树");
       printf("\n\n     4. 先序递归遍历二叉树");
       printf("\n\n     5. 后序递归遍历二叉树");
       printf("\n\n     6. 计算树中结点个数");
       printf("\n\n     0. 结束程序运行");
       printf("\n======================================");
       printf("\n     请输入您的选择 (1,2,3,4,5,6)");  scanf("%d",&k);
       switch(k) {
            case 0: exit(0);
            case 1:t=creat_bt1( );break; /*  调用性质5建立二叉树算法 */
            case 2:t=creat_bt2( );break; /*  调用递归建立二叉树算法   */
            case 3: {
                      inorder(t);                /*  调用中序遍历     */
                      printf("\n\n    打回车键,继续。"); ch=getchar();
                    } break;
            case 4: {
                      preorder(t);  /*  调用先序遍历 (需学生自己参照开发)    */
                      printf("\n\n    打回车键,继续。"); ch=getchar();
                    } break;
            case 5: {
                      afterorder(t);/*  调用后序遍历 (需学生自己参照开发)    */
                      printf("\n\n    打回车键,继续。"); ch=getchar();
                    } break;
            case 6:{
                      n=0;n0=0 ; n1=0; n2=0;  /* 全局变量置0 */
                      numb(t);
                      printf("\n     二叉树结点总数 n=%d",n);     
                      printf("\n     二叉树叶子结点数 n0=%d",n0);     
                      printf("\n     度为1的结点数 n1=%d",n1);
                      printf("\n     度为2的结点数 n2=%d",n2);
                      printf("\n\n   打回车键,继续。"); ch=getchar();
                    } break;
            case 7: exit(0);
      } /*  switch  */
      printf("\n ----------------");

  }while(k>=0 && k<8);
     printf("\n               再见!");
     printf("\n      打回车键,返回。"); ch=getchar();
} /* main */  


/* 利用二叉树性质5 ,借助一维数组V 建立二叉树 */
BiTNode *creat_bt1() {
    BiTNode *t,*p,*v[20]; int i,j; Etype e;
    /* 输入结点的序号i 、结点的数据e  */
    printf("\n 输入编号及数据(i,data),空格隔开=?"); scanf("%d %d",&i,&e);
    while(i!=0 && e!=0)              /* 当 i ,e都为0时,结束循环  */
       { p=(BiTNode *)malloc(sizeof(BiTNode));
         p->data=e; p->lch=NULL; p->rch=NULL;
         v[i]=p;
         if (i==1) t=p;              /* 序号为1的结点是根 */
         else{
                 j=i/2;
                 if(i%2==0) v[j]->lch=p;  /* 序号为偶数,做左孩子*/
                 else       v[j]->rch=p;  /* 序号为奇数,做右孩子*/
             }
         printf("\n 输入编号及数据(i,data),空格隔开=?"); scanf("%d %d",&i,&e);
       }
      return(t);
} /* creat_bt1 */


 /* 模仿先序递归遍历方法,建立二叉树 */
BiTNode *creat_bt2()  {
     BiTNode *t; int e;
     printf("\n 按先序顺序输入数据,空格间隔 data="); scanf("%d",&e);
     if(e==0) t=NULL;                  /* 对于0值,不分配新结点 */
     else {
         t=(BiTNode *)malloc(sizeof(BiTNode));
         t->data=e;
         t->lch=creat_bt2();  /* 左孩子获得新指针值  */
         t->rch=creat_bt2();  /* 右孩子获得新指针值  */
     }
     return(t);
} /* creat_bt2 */

 
 /* 中序递归遍历二叉树  */
void inorder(BiTNode *p)
{
    if (p)
    {  
        inorder(p->lch);
        printf("%3d",p->data);
        inorder(p->rch);
    }
} /* inorder  */

 /* 先序递归遍历二叉树  */
void preorder(BiTNode *p) {
//由同学自己完成

    if (p)
    {   
        printf("%3d",p->data);

        inorder(p->lch);
        inorder(p->rch);
    }


} /* preorder  */

 /* 后序递归遍历二叉树  */
void afterorder(BiTNode *p) {
//由同学自己完成

    if (p)
    {   

        inorder(p->lch);
        inorder(p->rch);

        printf("%3d",p->data);
    }


} /* afterorder  */

int lookup(BiTNode *p,int e)
{  
    //进阶(可选)
   //由同学自己完成

    if (p==NULL)
        return 0;
 
    if (p->data==e)
        return 1;
   
    if (inorder(p->lch)==1)
        return 1;

    if (inorder(p->rch)==1)
        return 1;

    return 0;
}
void insert(BiTNode *p,int i,int e){  //进阶(可选),i为结点编号,e为值(不能原有值重复)
//由同学自己完成

}
void dele(BiTNode *p,int e){  //进阶(可选)
//由同学自己完成

}


/* 利用中序递归遍历二叉树的方法,计算树中结点个数 */
/* 同学可以试着运用先序或后序递归遍历二叉树方法重新编写这一段函数 */  
void numb(BiTNode *p) {
    if (p)
    {  
        numb(p->lch);
              
        printf("%3d",p->data);
        n++;
        if(p->lch==NULL && p->rch==NULL) n0++;
        if((p->lch==NULL && p->rch!=NULL) || (p->lch!=NULL && p->rch==NULL)) n1++;
        if(p->lch!=NULL && p->rch!=NULL) n2++;
         /*  把访问的功能扩大了 */
        
        numb(p->rch);
    }
} /* numb  */
#366
九转星河2017-12-07 07:09
宜~开黑~
#367
九转星河2017-12-08 07:56
宜~走神~
#368
九转星河2017-12-09 09:57
宜~呆萌~
#369
炎天2017-12-09 12:12
宜~吃盒面~
#370
九转星河2017-12-10 08:25
宜~远离尘嚣~
#371
九转星河2017-12-11 09:07
宜~欢声雀跃~
#372
九转星河2017-12-12 08:17
宜~翻翻书~
#373
九转星河2017-12-14 08:59
宜~嫁娶~
#374
九转星河2017-12-15 09:02
宜~握握手~
#375
九转星河2017-12-16 09:48
宜~刷存在感~
#376
九转星河2017-12-17 07:56
宜~一面真诚~
#377
九转星河2017-12-18 07:48
宜~远航~
#378
九转星河2017-12-19 08:21
宜~忘我~
#379
九转星河2017-12-20 09:02
宜~买彩票~
#380
九转星河2017-12-21 10:18
宜~涨工资~
#381
九转星河2017-12-22 09:03
宜~忘我~
#382
九转星河2017-12-23 10:35
宜~攒人品~
#383
九转星河2017-12-25 09:00
宜~迷迷糊糊~
#384
九转星河2017-12-26 08:28
宜~开阔眼界~
#385
xiaomiking2017-12-26 17:59
我也来罐水了~~
#386
xiaomiking2017-12-27 09:07
我也来~~
#387
九转星河2017-12-27 10:40
宜~聚人心~
#388
九转星河2017-12-28 10:38
宜~小心翼翼~
#389
九转星河2017-12-29 07:48
宜~缠绵~
#390
九转星河2017-12-30 10:35
宜~晒太阳~
#391
九转星河2017-12-31 07:33
宜~拥有~
#392
九转星河2018-01-01 10:16
宜~请客~
#393
九转星河2018-01-02 10:11
宜~冷静~
#394
九转星河2018-01-03 13:13
宜~扬眉吐气~
#395
九转星河2018-01-04 11:10
宜~转身~
#396
九转星河2018-01-06 08:53
宜~提升自己~
#397
九转星河2018-01-06 08:54
宜~快意飞马~
#398
九转星河2018-01-07 18:24
宜~开阔眼界~
#399
九转星河2018-01-08 10:36
宜~小清新~
#400
九转星河2018-01-09 07:57
宜~翻翻书~
#401
九转星河2018-01-10 01:08
宜~耐住寂寞~
12345678910111213141516