| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1514 人关注过本帖
标题:计算以孩子-兄弟链表示的树的高度
只看楼主 加入收藏
xiaoxxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-10-4
结帖率:100%
收藏
 问题点数:0 回复次数:13 
计算以孩子-兄弟链表示的树的高度
利用递归的方法计算树高,但是运行结果总是2,是不是在创建的时候出了问题?
程序代码:
#include <stdio.h>
#include <stdlib.h>
typedef char telemtype;
typedef struct tnode{
    telemtype data;
    struct tnode *hp,*vp;}tnode,*bitree;
int visit(bitree p){
    int max=0;
    if(p!=NULL){
        printf("%c ",p->data);
        visit(p->hp);
        visit(p->vp);
    }
    return max;
}
void createbt(bitree &bt){
    char ch;
    scanf("%c",&ch);
    if(ch=='#')bt=NULL;
    else{
        bt=(bitree)malloc(sizeof(tnode));
        bt->data=ch;
        createbt(bt->hp);
        createbt(bt->vp);
    }
}
int height(bitree &bt){
    tnode *p;
    int m,max=0;
    if(bt==NULL)
        return 0;
    else if(bt->vp==NULL)
        return 1;
    else{
        p=bt->vp;
        while(p!=NULL){
            m=height(p);
            if(max<m) max=m;
            p=p->hp;
        }
        return m+1;
    }
}
void main(){
    bitree bt;
    printf("请输入树:");
    createbt(bt);
    printf("树为:\n");
    visit(bt);
    printf("\n树深为%d\n",visit(bt));
}
搜索更多相关主题的帖子: 兄弟 高度 孩子 
2010-12-09 22:52
kidangel666
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:139
注 册:2010-9-15
收藏
得分:0 
printf("\n树深为%d\n",height(bt));
你函数都写对了,但是,就是这句写错
2010-12-10 09:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
return max+1;

    char ch[2];
    scanf("%s",ch);
    if(ch[0]=='#')
        bt=NULL;
    else
    {
        bt=(bitree)malloc(sizeof(tnode));
        bt->data=ch[0];
        createbt(bt->hp);
        createbt(bt->vp);
    }
2010-12-10 16:17
xiaoxxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-10-4
收藏
得分:0 
为什么它的递归创建和二叉树的不同呢?我运行出来结果都是1啊。。。

[ 本帖最后由 xiaoxxr 于 2010-12-10 16:45 编辑 ]
2010-12-10 16:24
kidangel666
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:139
注 册:2010-9-15
收藏
得分:0 
恩?你照我那样改还是一?我输入ABD##E##C#F##的时候输出为3,符合结果
2010-12-10 23:59
xiaoxxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-10-4
收藏
得分:0 
哦,貌似是我输入的时候错了,请教一下输入树时的顺序是什么啊?比如:A有三个孩子B、C、D,B又有一个孩子E,我输的是ABE##C#D###
2010-12-11 16:12
kidangel666
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:93
专家分:139
注 册:2010-9-15
收藏
得分:0 
你建立的是二叉树,哪里出来1个根节点有3个孩子的啊
2010-12-11 16:21
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
采用的存储结构式 孩子兄弟
根据int height(bitree &bt)函数 中的
if(bt==NULL)
        return 0;
else if(bt->vp==NULL)
        return 1;
else{。。。}语句 vp这支表示孩子 则自然hp表示兄弟
根据void createbt(bitree &bt)函数中的
    char ch;
    scanf("%c",&ch);
    if(ch=='#')bt=NULL;
    else{
        bt=(bitree)malloc(sizeof(tnode));
        bt->data=ch;
        createbt(bt->hp);
        createbt(bt->vp);
    }
是先兄弟 后再是孩子 这样 的顺序来构造的
如果有棵树 如下:
            A
       B    C     D
       E    F     G
表示A有三个孩子B C D第三层分别是对应的上层的孩子  则输入为:A # B C D # E # # F # # G # #
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-12-11 16:51
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
下次写的时候 带点可以看懂点的注释 哪个指向是孩子那个是兄弟 写的时候就不会把握不准
2010-12-11 16:54
xiaoxxr
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2010-10-4
收藏
得分:0 
嗯嗯,受教了,谢谢!

[ 本帖最后由 xiaoxxr 于 2010-12-11 16:58 编辑 ]
2010-12-11 16:55
快速回复:计算以孩子-兄弟链表示的树的高度
数据加载中...
 
   



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

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