| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1727 人关注过本帖
标题:关于一个3度树的0度结点、2度结点、总结点数以及高度的求法。
只看楼主 加入收藏
丶随风飘扬
Rank: 2
等 级:论坛游民
帖 子:38
专家分:20
注 册:2019-11-1
结帖率:66.67%
收藏
 问题点数:0 回复次数:0 
关于一个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;                        //总结点数=根+所有子树结点树
}
搜索更多相关主题的帖子: 结点 return 点数 int tree 
2019-11-13 19:03
快速回复:关于一个3度树的0度结点、2度结点、总结点数以及高度的求法。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018717 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved