关于一个3度树的0度结点、2度结点、总结点数以及高度的求法。
计算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; //总结点数=根+所有子树结点树 }