回 帖 发 新 帖 刷新版面

主题:自己写的作业题2,不知道哪里错了……请帮忙看看

二 二叉树
#include<stdio.h>
#include<stdlib.h>
#define M  100

typedef struct BTnode
{int data;
 struct BTNode *lchild;
  struct BTNode *rchild;
 }BTNode,*BiTree;


void Create(BiTree T)
{
 int a;
 scanf("%d",&a);
 if(a==0) T=NULL;
 else{T=(BiTree)malloc(sizeof(BTNode));
      T->data=a;
      Create(T->lchild);
      Create(T->rchild);
      }
}
/*Create*/

int Count(BiTree T)
   { if(t==NULL) 
       return 0;
     else 
       if(T->lchild==NULL&&T->rchild==NULL) 
         return 1;
        else   
         return (Count(t->lchild)+Count(t->rchild)+1);
    
   }
/*Count*/

int Depth(Bitree T)
{int dep1,dep2;
  if(t==NULL)
  return 0;
  else
    {dep1=Depth(t->lchild);
     dep2=Depth(t->rchild);
      if(dep1>dep2)
         return (dep1+1);
      else return (dep2+1);
     }
 }
/*Depth*/




Bitree *que[M];
int front=0;rear=0;
  Bitree  * creat()
 {Bitree *T;
  int x;
  scanf("%d",&x);
  if(x==0)
     T=NULL;
    else 
      {T=malloc(sizeof(Bitree));
       T->lchild=creat();
       T->rchild=creat();
       }
    return  T;
  }
/*creat*/

void inorder(T)
Bitree *t;
 {
  if(T=NULL)
   {inorder(T->lchild);
    printf("%4d",T->data);
    inorder(T->rchild);
    }
 }
/*inorder*/

void enqueue(T)
Bitree *T;
 {
  if(front!=(rear+1)%M)
  {rear=(rear+1)%M;
   que[rear]=T;
   }
 }
/*enqueue*/

Bitree *delqueue()
{if(front==rear)
  return NULL;
  front=(front+1)%M;
  return(que[front]);
}
/*delqueue*/



void levorder(T)
Bitree *T;
{Bitree *p;
  if(T!=NULL)
   {enqueue(t);
    while(front!=rear)
     {p=delqueue();
      printf("%4d",p->data);
      if(p->lchild!=NULL)
         enqueue(p->lchild);
      if(p->rchild!=NULL)
         enqueue(p->rchild);
      }
    }
 }
/*levorder*/
       
  
void main()
{
    BiTree T;
        Create(T);
    printf("%d",Count(T));
    printf("\n");
    printf("%d",Depth(T));
    printf("\n");
    levorder(T);
}
谢谢!

回复列表 (共1个回复)

沙发

不是我说你,你这个程序写得也太马虎了,大小写混乱,上下不一致,就算是照书上抄也不会这样吧,写程序应该认真一点。还有就是书上的都是类C或类C++语言描述,千万不可照搬,用的时候要稍微改一下,要多看看具体的上机程序

#include<stdio.h>
#include<stdlib.h>
#define M  100

typedef struct BTNode //这里原来是 typedef struct BTnode的
{int data;             //请区分大小写
 struct BTNode *lchild;
  struct BTNode *rchild;
 }BTNode,*BiTree;


/*void Create(BiTree T)
{
 int a;
 scanf("%d",&a);
 if(a==0) T=NULL;
 else{T=(BiTree)malloc(sizeof(BTNode));
      T->data=a;
      Create(T->lchild);
      Create(T->rchild);
      }
}      */ //这个函数不好用,你下面还有一个创建二叉树的函数,所以用下面那个
/*Create*/


int Count(BiTree T)
   { if(T==NULL)    //这里也请区分大小写
       return 0;
     else 
       if(T->lchild==NULL&&T->rchild==NULL) 
         return 1;
        else   
         return (Count(T->lchild)+Count(T->rchild)+1); //请注意区分大小写
    
   }
/*Count*/

int Depth(BiTree T)
{int dep1,dep2;
  if(T==NULL) //请区分大小写
  return 0;
  else
    {dep1=Depth(T->lchild);
     dep2=Depth(T->rchild);
      if(dep1>dep2)
         return (dep1+1);
      else return (dep2+1);
     }
 }
/*Depth*/




/*Bitree *que[M];
int front=0;rear=0; */ //最好用循环队列的结构体,我也不知道你这样的用法对不对

#define M 100
typedef struct{
    BiTree *base;
    int front;
    int rear;    //循环队列结构体,请用规范的用法
  }queue;

void initqueue(queue *q)//初始化循环队列
{
 q->base=(BiTree *)malloc(M*sizeof(BiTree));
 if(!q->base)return;
 q->front=q->rear=0;
}

  BiTree  creat(BiTree T) //请注意你的二叉链树结构定义的是*BiTree ,说明BiTree是个指针类型的,就不要乱用"*"号了
 {                        //还有格外注意大小写
  int x;
  scanf("%d",&x);
  if(x==0)
     return NULL;
    else 
      {T=(BiTree)malloc(sizeof(BTNode));
       T->data=x;
       T->lchild=creat(T->lchild);
       T->rchild=creat(T->rchild);
       }
    return  T;
  }
/*creat*/   

void inorder(BiTree T)
//Bitree *t;   怎么可以这样用呢?参数是写在函数名的括号里的
 {
  if(T==NULL)
   {inorder(T->lchild);
    printf("%4d",T->data);
    inorder(T->rchild);
    }
 }
/*inorder*/

void enqueue(queue *q,BiTree T)
//Bitree *T;  //同上
 {
  if(q->front!=(q->rear+1)%M)
  {
   q->base[q->rear]=T;
   q->rear=(q->rear+1)%M;
   }
 }
/*enqueue*/

BiTree delqueue(queue *q)
{
  BiTree e;
  if(q->front==q->rear)
  return NULL;
  e=q->base[q->front];
  q->front=(q->front+1)%M;
  return(e);
}
/*delqueue*/



void levorder(BiTree T)
//Bitree *T;
{BiTree p;
 queue q;
 initqueue(&q);
  if(T!=NULL)
   {enqueue(&q,T);
    while(q.front!=q.rear)
     {p=delqueue(&q);
      printf("%4d",p->data);
      if(p->lchild!=NULL)
         enqueue(&q,p->lchild);
      if(p->rchild!=NULL)
         enqueue(&q,p->rchild);
      }
    }
 }
/*levorder*/
       
  
void main()
{
    BTNode *T;
    T=creat(T);
    printf("%d",Count(T));
    printf("\n");
    printf("%d",Depth(T));
    printf("\n");
    levorder(T);
    getch();
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册