有关二叉树问题,希望有人指点下,谢谢
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。。望有大师能指点一下,,感激....
#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。。望有大师能指点一下,,感激....
相关文章推荐
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 多年困扰我的一个技术问题,希望这方面的专家指点一下,有关SQLServer并发控制方面的问题
- 求助MySQL问题,希望高手指点一二
- POP3 邮件接收 出现乱码了,希望哪位能帮忙看下啥问题!帮我改下,谢谢
- 一个关于WebRequest的问题,希望大家能够讨论或指导一下小弟,谢谢
- 按"利用C++语言设计可扩展线程池"文章实现代码,但是有问题,希望大家来讨论,指出问题,谢谢
- 新手问题:jdk1.4.2 + WTK2.0!进来帮我指点一下错在何处,程序不长?谢谢
- 有关二叉树的相关的问题的实现
- 发送二进制短信时出现的问题,希望大家指点
- 这是我参考网上编写的一道数据结构关于二叉树求其子树是否指针或者线索,及其对应得值,但是我运行结果却是有点问题,希望高手帮指教下!
- 请教淘宝API sign签名问题,望高人指点!谢谢!
- 初学java,写的一个小程序遇到点问题,又碰上论坛关闭,在此上代码,希望能有人帮我看下,多谢
- 有关二叉树的遍历问题
- 祝大家新年快乐,希望看我贴子的给点留言和指点呀,共同努力,谢谢了!
- 急急急!!!有关asp字符串处理的问题,请大虾指点???
- 我的机子有点问题.希望各路大虾进来帮帮忘忙..谢谢