【正确答案】(1)
#define DATATYPE2 char /*二叉树结点类型定义*/
#define NULL'\0'
typedef struct node
{DATATYPE2 data;
struct node*lchild,*rchild;
}BTLINK;
BTLINK *creat() /*以二叉链表为存储结构的二叉树的建立算法*/
{ BTLINK*q;
BTLINK*s[30];
int j,i;
char x;
printf("i,x=");
scanf("/%d,/%c",&i,&x);
while(i!=0&&x!='$')
{ q=(BTLINK*)malloc(sizeof(BTLINK));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
s[i]=q;
if(i!=1)
{ j=i/2;
if(i/%2==0)
s[j]->lchild=q;
else s[j]->rchild=q;
}
printf("i,x=");
scanf("/%d,/%c",&i,&x);}
return s[1];
}
int depthtree(BTLINK*bt) /*求二叉树的高度算法*/
{ int dep,depl,depr;
if(bt==NULL)
dep=0;
else
{ depl=depthtree(bt->lchild);
depr=depthtree(bt->rchild);
if(depl>depr)
dep=depl+1;
else
dep=depr+1;
}
return dep;
}
main()
{ BTLINK*bt;
int treeh;
bt=creat();
treeh=depthtree(bt);
printf("\n二叉树高度=/%d",treeh);
}
(2)
#define DATATYPE2 char /*二叉树结点类型定义*/
#define NULL'\0'
typedef struct node
{DATATYPE2 data;
struct node*lchild,*rchild;
}BTLINK;
BTLINK*creat() /*以二叉链表为存储结构的二叉树的建立算法*/
{ BTLINK*q;
BTLINK*s[30];
int j,i;
char x;
printf("i,x=");
scanf("/%d,/%c",&i,&x);
while(i!=0&&x!='$')
{ q=(BTLINK*)malloc(sizeof(BTLINK));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
s[i]=q;
if(i!=1)
{ j=i/2;
if(i/%2==0)
s[j]->lchild=q;
else s[j]->rchild=q;
}
printf("i,x=");
scanf("/%d,/%c",&i,&x);}
return s[1];
}
void digui(BTLINK*bt) /*二叉树的中序遍历递归算法*/
{ if(bt!=NULL)
{digui(bt->lchild);
printf("/%c ",bt->data)j
digui(bt->rchild);}
}
main()
{ BTLINK*bt;
bt=creat();
digui(bt);
}
(3)
#define DATATYPE2 char /*二叉树结点类型定义*/
#define NULL'\0'
typedef struct node
{DATATYPE2 data;
struct node*lchild,*rchild;
}BTLINK;
BTLINK*creat() /*以二叉链表为存储结构的二叉树的建立算法*/
{ BTLINK*q;
BTLINK*s[30];
int j,i;
char x;
printf("i,x=");
scanf("/%d,/%c",&i,&x);
while(i!=0&&x!='$')
{q=(BTLINK*)malloc(sizeof(BTLINK));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
s[i]=q;
if(i!=1)
{j=i/2;
if(i/%2==0)
s[j]->lchild=q;
else s[j]->rchild=q;
}
printf("i,x=");
scanf("/%d,/%c",&i,&x);}
return s[1];
}
void zhxuf(BTLINK*bt) /*二叉树的中序遍历非递归算法*/
{BTLINK*q,*s[20];
int top=0;
int bool=1;
q=bt;
do
{while(q!=NULL)
{top++;s[top]=q;q=q->lchild;}
if(top==0)
bool=0;
else
{ q=s[top];
top--;
printf("/%c",q->data);
q=q->rchild;
}
}while(bool);
}
main()
{ BTLINK*bt;
bt=creat();
zhxuf(bt);
}
(4)
#define DATATYPE2 char /*二叉树结点类型定义*/
#define NULL'\0'
typedef struct node
{DATATYPE2 data;
struct node*lchild,*rchild;
}BTLINK;
int k;
BTLINK*creat() /*以二叉链表为存储结构的二叉树的建立算法*/
{ BTLINK*q;
BTLINK*s[30];
int j,i;
char x;
printf("i,x=");
scanf("/%d,/%c",&i,&x);
while(i!=0&&x!='$')
{ q=(BTLINK*)malloc(sizeof(BTLINK));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
s[i]=q;
if(i!=i)
{ j=i/2;
if(i/%2==0)
s[j]->lchild=q;
else s[j]->rchild=q;
}
printf("i,x=");
scanf("/%d,/%c",&i,&x);}
return s[1];
}
void geshu(BTLINK*bt) /*求二叉树的叶子结点个数算法*/
{ if(bt!=NULL)
{ geshu(bt->lchild);
if(bt->lchild==NULL&&bt->rchild==NULL)
k++;
geshu(bt->rchild);)
}
main()
{ BTLINK*bt;
k=0;
bt=creat();
geshu(bt);
printf("二叉树叶子结点的个数=/%d",k);
}
【答案解析】