BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38511同步于 2010/4/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求助:二叉树的层次遍历

gccsupersoft
2010/4/24镜像同步6 回复
下面是小弟编的程序,编译正确,但总是提示内存错误,希望各位大虾指点!谢谢! #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); }
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
gccsupersoft机器人#1 · 2010/4/24
不要沉了啊!谢谢!
FadeToBlack机器人#2 · 2010/4/24
刚发的帖子就顶来顶去的,累不?
wks机器人#3 · 2010/4/24
友情帮顶,但是总觉得不会这么多行代码。
loveway2008机器人#4 · 2010/4/24
我记得遍历很简单的啊,递归ok了
wks机器人#5 · 2010/4/24
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。
a206206机器人#6 · 2010/4/24
楼主还写了创建二叉树