返回信息流下面是小弟编的程序,编译正确,但总是提示内存错误,希望各位大虾指点!谢谢!
#include <stdio.h>
#include <stdlib.h>
#define elemtype int
#define MAX 100
typedef struct bitnode{
elemtype data;
struct bitnode *lchild,*rchild;
}bitnode,*bitree;
typedef struct queue{
bitree qu[MAX];
int front;
int rear;
int tag;
}queue;
int visit(bitree e){
printf("%d",e->data);
return 0;
}
int createbitree(bitree &t){
elemtype ch;
scanf("%d",&ch);
if(ch==-1)
{
t=NULL;
}
else
{
if(!(t=(bitnode*)malloc(sizeof(bitnode))))
{
printf("overflow!\n");
exit(1);
}
t->data=ch;
createbitree(t->lchild);
createbitree(t->rchild);
}
return 0;
}
/*queue *initqueue(){
queue *q;
q=(queue*)malloc(sizeof(queue));
q->front=0;
q->rear=0;
q->tag=0;
return q;
}*/
int enqueue(queue* &q,bitree e){
if(q->rear==q->front&&q->tag==1)
return 0;
else
{
q->qu[q->rear]=e;
q->rear=(q->rear+1)%MAX;
if(q->rear==q->front)
q->tag=1;
return 1;
}
}
int dequeue(queue* &q,bitree e){
if(q->rear==q->front&&q->tag==0)
return 0;
else
{
e=q->qu[q->front];
q->qu[q->front]=0;
q->front=(q->front+1)%MAX;
if(q->rear==q->front)
q->tag=0;
return 1;
}
}
int queueempty(queue* &q){
if(q->rear==q->front&&q->tag==0)
return 1;
else
return 0;
}
int depth(bitree &t){
int dep1,dep2;
if(t==NULL)
return 0;
else
{
dep1=depth(t->lchild);
dep2=depth(t->rchild);
return dep1>dep2?dep1+1:dep2+1;
}
}
void countleaf(bitree t,int &count){
if(t)
{
if((!t->lchild)&&(!t->rchild))
count++;
countleaf(t->lchild, count);
countleaf(t->rchild, count);
}
}
void main(){
bitree t=NULL;
bitree p=NULL;
//queue q;
int count=0;
//initqueue();
queue *q;
q=(queue*)malloc(sizeof(queue));
q->front=0;
q->rear=0;
q->tag=0;
printf("create a binary tree\n");
createbitree(t);
printf("the layer order is:\n");
//push(&s,t);
enqueue(q,t);
while(!queueempty(q)){
dequeue(q,p);
visit(p);
if(p->lchild)
enqueue(q,p->lchild);
if(p->rchild)
enqueue(q,p->rchild);
}
printf("the depth is:%d\n",depth(t));
countleaf(t,count);
printf("the number of leaf is:%d\n",count);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #38511同步于 2010/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助:二叉树的层次遍历
gccsupersoft
2010/4/24镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
int dequeue(queue* &q,bitree e){
if(q->rear==q->front&&q->tag==0)
return 0;
else
{
e=q->qu[q->front];
q->qu[q->front]=0;
q->front=(q->front+1)%MAX;
if(q->rear==q->front)
q->tag=0;
return 1;
}
}
这里有问题吧。e不是引用类型。函数内部改e的值不改变外面的e。