注册 登录
编程论坛 C语言论坛

关于一个3度树的0度结点、2度结点、总结点数以及高度的求法。

丶随风飘扬 发布于 2019-11-13 19:03, 2123 次点击
计算0度结点的函数是正确的,为什么当我用相同的思路去编写计算2度结点函数和计算总结点数函数为什么会出错?还有怎么求树的高度,这个我不会。望指明思路并给出代码。
程序代码:

#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;                        //总结点数=根+所有子树结点树
}
0 回复
1