为什么我的这个代码能正常编译,但是出不来计算的结果a呢?
#include<stdio.h>#include<stdlib.h>typedefcharTElemType;//二叉树的二叉链表的结点结构定义代码typedefstr...
#include<stdio.h>
#include<stdlib.h>
typedef char TElemType;
//二叉树的二叉链表的结点结构定义代码
typedef struct BTNode
{
TElemType data;
struct BTNode *lchild,*rchild;
}BTNode,*BTree;
void CreatBTree(BTree *T);//前序遍历生成二叉树
int dson(BTree T);
int main()
{
int a=0;
BTree T = NULL;
printf("先序遍历生成二叉树\n");
CreatBTree(&T);
a=dson(T);
printf("双分支节点数为:%d",a);
}
//前序遍历生成二叉树
void CreatBTree(BTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(ch == '#')
*T = NULL;
else
{
*T = (BTree)malloc(sizeof(BTNode));
if(!*T)
printf("失败\n");
(*T)->data = ch;
CreatBTree(&(*T)->lchild);//左子树
CreatBTree(&(*T)->rchild);//右子树
}
}
int dson(BTree T)
{
if(T=NULL)
return 0;
else if(T->lchild!=NULL&&T->rchild!=NULL)
return dson(T->lchild)+dson(T->rchild)+1;
else
return dson(T->lchild)+dson(T->rchild);
} 展开
#include<stdlib.h>
typedef char TElemType;
//二叉树的二叉链表的结点结构定义代码
typedef struct BTNode
{
TElemType data;
struct BTNode *lchild,*rchild;
}BTNode,*BTree;
void CreatBTree(BTree *T);//前序遍历生成二叉树
int dson(BTree T);
int main()
{
int a=0;
BTree T = NULL;
printf("先序遍历生成二叉树\n");
CreatBTree(&T);
a=dson(T);
printf("双分支节点数为:%d",a);
}
//前序遍历生成二叉树
void CreatBTree(BTree *T)
{
TElemType ch;
scanf("%c",&ch);
if(ch == '#')
*T = NULL;
else
{
*T = (BTree)malloc(sizeof(BTNode));
if(!*T)
printf("失败\n");
(*T)->data = ch;
CreatBTree(&(*T)->lchild);//左子树
CreatBTree(&(*T)->rchild);//右子树
}
}
int dson(BTree T)
{
if(T=NULL)
return 0;
else if(T->lchild!=NULL&&T->rchild!=NULL)
return dson(T->lchild)+dson(T->rchild)+1;
else
return dson(T->lchild)+dson(T->rchild);
} 展开
2个回答
展开全部
首先说下这段代码的问题:
一、scanf函数后面如果不想把回车也放到Btree里面,后面加上getchar()函数过滤掉回车;
二、在dson函数里面有一个判断T是否为空错了,是==不是=,改为if(T == NULL);
三、还是在这个函数,逻辑错误,else if()这句条件是或者||,不是且&&,改成
else if(T->lchild || T ->rchild );
四、上面都改完就有结果出来了,但是节点数会少一个,因为最后一个没有孩子没有计数,改成下面的就可以:
五、这里输入会有个不好的地方,就是你输入的多上个字符,就要输入2(n-1)个#才能结束输入,而且严格意义上说这生成的不是一颗树而是链表,一直往左边扩展,没有树的优势了。
以上就是这段代码的分析,解答的好的话,请多多采纳,谢谢。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询