2 回答
TA贡献1873条经验 获得超9个赞
#include<stdio.h>
#include<malloc.h>
#include"stdlib.h"
typedef int Status;
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;//结点定义
//BiTree root;//根结点定义
//构造二叉树
BiTree CreateBiTree(BiTree T)
{
//按先序输入个接点的值,空格字符 表示空树
//构造二叉链表表示的二叉树T
char ch;
scanf("%c",&ch);
if(ch!=EOF&&ch!='\n')
{if(ch==' ') T=NULL;
else
{
T=(BiTree)malloc(sizeof(struct BiTNode));
if(!T) exit(0);
T->data=ch; //生成根接点
T->lchild=CreateBiTree(T->lchild);//构造左子树
T->rchild=CreateBiTree(T->rchild);//构造右子树
} }
return(T);
}
//中序访问并输出各接点字符
void INORDER(BiTree T){
if(T)
{INORDER(T->lchild); //中序遍历左子树
printf("%c\t",T->data); //访问接点*t
INORDER(T->rchild); //中序遍历右子树
}
}
//计算树的高度
int depth(BiTree T){
int dep1,dep2;
if(T==NULL)return(0);
else
{dep1=depth(T->lchild);
dep2=depth(T->lchild);
if(dep1>dep2)return(dep1+1);
else return(dep2+1);}
}
int LeafCount_BiTree(BiTree T)//求二叉树中叶子结点的数目
{
if(!T) return 0; //空树没有叶子
else if(!T->lchild&&!T->rchild) return 1; //叶子结点
else return LeafCount_BiTree(T->lchild)+LeafCount_BiTree(T->rchild);//左子树的叶子数加上右子树的叶子数
}//LeafCount_BiTree
void main(){
struct BiTNode root,*p;/*根结点指针定义*/
printf("\nplease input the treestring you want create :\n");
p=CreateBiTree(&root);/*传入根结点指针的地址在函数中指向二叉树根*/
INORDER(p);
depth(p);
LeafCount_BiTree(p);
}
测试通过:
运行结果为:// 这里输入时按照你的abc##de#g##f### ,注意空格的输入
/*
please input the treestring you want create :
abc de g f
c b e g d f a
*/
TA贡献1817条经验 获得超14个赞
1、BiTree类型没有定义
2、CreateBiTree的返回类型写了两个(Status和BiTree)
3、CreateBiTree的参数定义的是BiTree的引用类型,但main里面传的是BiTree的指针类型。
4、既然CreateBiTree返回的是Status类型,你最后一句return T;就不对了。
5、LeafCount_BiTree里两个递归调用把函数名字写错了。
添加回答
举报