永发信息网

求二叉树的叶子个数

答案:1  悬赏:30  手机版
解决时间 2021-05-12 08:00

二叉树采用二叉链表结构表示。设计并实现如下算法:求一棵二叉树的深度和双分支结点的个数。

程序 2007-12-07 23:28 阅读5 评论0 字号: 大大 中中 小小

#include<stdio.h>
#include<stdlib.h>

#include<string.h>

#define STACK_INIT_SIZE 100
#define STACKING 10
typedef struct Binode{
struct Binode *lchild;
struct Binode *rchild;
char data;

int number;
}Binode,BiTree;

typedef struct QNode
{
Binode data1;
struct QNode *next;
}QNode,*Quen;

typedef struct
{
Quen front;
Quen rear;
}linkQ;


void InitQueue(linkQ *Q)
{
Q->front=Q->rear=(Quen)malloc(sizeof(QNode));
if(!Q->front)exit(0);
Q->front->next=NULL;
}
void DeQuene(linkQ *Q,BiTree *e)
{
Quen p;

if(Q->front==Q->rear)
printf("error\n");
p=Q->front->next;
*e=p->data1;
Q->front->next=p->next;
if(Q->rear==p)Q->rear=Q->front;
free(p);
}

void EnQueue(linkQ *Q,BiTree *e)
{
Quen p;

p=(Quen)malloc(sizeof(QNode));
if(!p)exit(0);
p->data1=*e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
BiTree *creatBiTree(BiTree *T)
{char ch;
scanf("%c",&ch);
if(ch==' ') T=NULL;
else{
T=(BiTree *)malloc(sizeof(Binode));
T->data=ch;
T->lchild=creatBiTree(T->lchild);
T->rchild=creatBiTree(T->rchild);
}
return T;
}
void visit(BiTree *T)
{printf("%-2c",T->data);}
int depth(BiTree *T)
{int depth1,depth2;
if(!T)return 0;
else
{
depth1=depth(T->lchild);
depth2=depth(T->rchild);
if(depth1>depth2)return depth1+1;
else return depth2+1;
}
}
int Leaf_Count(BiTree *T)
{
if(!T) return 0;
else if(!T->lchild&&!T->rchild) return 1;
else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);
}


void LayerOrder(BiTree *T)
{ linkQ Q; BiTree p;int i=0;
InitQueue(&Q);
EnQueue(&Q,T);
while(Q.front!=Q.rear)
{
DeQuene(&Q,&p);
if(p.lchild!=NULL&&p.rchild!=NULL){visit(&p);i++;}
if(p.lchild) EnQueue(&Q,p.lchild);
if(p.rchild) EnQueue(&Q,p.rchild);
}
printf("\nthe jiedian zhonshu shi:%d\n",i);
}

BiTree *Create_G(BiTree *T)
{ char c;
BiTree *p,*s[10000];
int b,top=-1;
p=NULL;T=NULL;
c=getchar();
while(c != '#'){
switch(c){

case '(':

top++;
s[top] = p;
b = 1;
break;
case ')':
if(top == -1){
printf("二叉树广义表字符串错误!\n");
exit(1);
}
top--;
break;
case ',':
b = 2;
break;
default:
p =(Binode*)malloc(sizeof(Binode));
p->data = c;
p->lchild = p->rchild = NULL;
if(T == NULL)
{
T = p;
}
else
{
if( b == 1)
{
s[top]->lchild = p;
}
else
{
s[top]->rchild = p;
}
}
}
c=getchar();
}
return T;
}
void main()
{BiTree p,*t;

t=creatBiTree(&p);
printf("the tree's depth is:\n");
printf("%d\n",depth(t));
printf("you liang ge jiedian de jiedian shi:\n");
LayerOrder(t);
printf("%d\n",Leaf_Count(t));



}

最佳答案
你好哦。
有幸看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
对于你的问题我爱莫能助!
可能是你问的问题有些专业了。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去你问问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
祝你好运~!
快过年了,
最后祝您全家幸福健康快乐!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
升级爷爷祝福语,升级为爷爷奶奶的祝福语
혹시내가 정상이라면 꼭나를 사랑하지안을꺼
我的浏览器打不开建设银行的网页
耐打羽毛球什么牌子好,哪种羽毛球比较耐打?
马上元旦了、谁来盖楼,生日楼!
我家小狗这几天什么也不吃,吃了就吐怎么办,
求这视频里的歌下载
第一个字是不的诗词,有没有古诗词是有不曾回
求一部漫画!···
他问“你觉得我们在一起合适吗?”是什么意思
怎么快速提高英语成绩?
三鹿奶粉说明市场经济有哪些局限性
急求QQ仙境的激活码 有的帮帮忙拉 感激不尽
形容雨天伤感的诗句
忆典定制和卡当网哪个定制比较好?
推荐资讯
初学单反用什么镜头,初学单反应该买什么镜头?
为什么手机信号这么差,4G手机怎么信号那么差
表格里打字怎么换行,word表格中文字如何换行
有没有关于军人的现代诗词
变频空调买什么牌子好,买挂壁空调什么品牌最
man的反义词
QQ校友的好友我删了啊,怎么QQ农场里还是有它
表示靠自己的句子,描写要靠自己的古诗诗句
急!急!急!个人小额短期信用贷款?
爱情经典电影台词英文,求一些英语电影里的经
为什么台湾对服贸协议如此的敏感如此的反对,
英语中表达“出席、参加”的一些词各有什么不
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?