您的位置:首页 > 其它

有关二叉树问题,希望有人指点下,谢谢

2007-06-09 16:52 232 查看
#include"stdlib.h" /* 存储分配头文件,或用"malloc.h" */
#include"stdio.h" /* 标准I/O头文件 */
#define NULL 0
#define MAX 100
#define LENG sizeof(struct Bnode) /* 确定结点所占空间的字节数 */
typedef char ElemType; /* 抽象元素类型为char类型 */
typedef struct Bnode /* Bnode为结点类型 */
{ char data; /* data为抽象元素类型 */
struct Bnode *lchild, *rchild; /* 为指针类型 */
}Bnode,*Btree;

void creat_tree(Bnode **root) /* root是指向指针的指针类型 */
{ /* 本算法递归生成二叉树 */
ElemType ch;
scanf("%c",&ch); /* 输入结点,字符型 */
if (ch==' ') *root=NULL; /* 生成空二叉树 */
else /* 生成非空二叉树 */
{ *root=(Bnode *)malloc(LENG); /* 申请结点空间 */
(*root)->data=ch; /* 生成根结点 */
(*root)->lchild=(*root)->rchild=NULL; /* 本行可省去 */
creat_tree(&(*root)->lchild); /* 递归生成左子树 */
creat_tree(&(*root)->rchild); /* 递归生成右子树 */
}
}

void outtree(Bnode *q)
{
if(q!=NULL){
outtree(q->lchild);
printf("%c",q->data);
outtree(q->rchild);
}
else
printf(" ");
}

int find(Btree q,int b)
{
switch(b){
case 0: /*求叶子数*/
if(q==0) return 0;
if(q->lchild ==0 && q->rchild ==0) return 1;
case 1: /*度为1的节点数*/
if(q==0) return 0;
if(q->lchild==0 || q->rchild==0) return 1;;
case 2: /*度为2的节点数*/
if(q==0) return 0;
if(!(q->lchild ==0 || q->rchild ==0)) return 1;
}
return (find(q->lchild,b)+find(q->rchild,b));
}

void main()
{
Bnode *p;
int a,b;
creat_tree(&p);
outtree(p);/*中序遍历递归*/
printf("请输入你要查找的节点度数b=");
scanf("%d",&b);
if(b>2)
printf("没有度为%d的节点,你输入有错!",b);
else{
a=find(p,b);
printf("%d",a);}
}

在计算节点数的那个算法里..算叶子和度为1的节点数可以,但求度为3的节点数却不行。它在执行完 if(!(q->lchild ==0 || q->rchild ==0)) return 1;这句后,在执行下面的时候,它跳过了 return (find(q->lchild,b)+find(q->rchild,b)); 使得结果只能是0和1。。望有大师能指点一下,,感激....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐