程序代码:#include <stdio.h>
#include <stdlib.h>
#define m 3
#define newnode (tree*)malloc(sizeof(tree))
typedef struct k
{
char data;
struct k* c[m];
}tree;
tree* creat() //前序遍历建树
{
char ch;int i;
tree* t;
ch=getchar();
if(ch=='#') return NULL;
t=newnode;t->data=ch;
for(i=0;i<m;i++)
t->c[i]=creat();
}
void pre(tree* t)//前序遍历树
{
int i;
if(t==NULL) return;
printf("%c",t->data);
for(i=0;i<m;i++)
pre(t->c[i]);
}
int jisuan0(tree* t)//计算0度结点数
{
int n=0;int i,j=0;
if(t==NULL) return 0;
for(i=0;i<m;i++)
if(t->c[i]!=NULL)
j++;
if(j==0) return 1;
for(i=0;i<m;i++)
n=n+jisuan00(t->c[i]);
return n;
}
int jisuan2(tree* t)//计算2度结点
{
int i,j=0,n=0;
if(t==NULL) return 0;
for(i=0;i<m;i++)
if(t->c[i]!=NULL)
j++; //j记录非空子树个数。
if(j==2) return 1;
for(i=0;i<m;i++)
n=n+jisuan2(t->c[i]); //计算所有子树的2度结点数。
if(j==2) return n+1; //根为2度结点,返回n+1。
else return n;
}
int jisuanall(tree* t)//计算所有结点数
{
int i,j=0,n=0;
if(t==NULL) return 0;
for(i=0;i<m;i++)
if(t->c[i]!=NULL)
j++; //j记录非空子树个数。
return j;
for(i=0;i<m;i++)
return n=n+jisuanall(t->c[i]); //计算所有子树的结点数。
return n+1; //总结点数=根+所有子树结点树
}