| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 893 人关注过本帖
标题:求助啊!!!!请大家来帮忙看看。。。。
只看楼主 加入收藏
狂一户
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-11-5
结帖率:100%
收藏
 问题点数:0 回复次数:10 
求助啊!!!!请大家来帮忙看看。。。。
#include<iostream>
using namespace std;
typedef char ElemType;
#define MaxSize 100
typedef struct node         //定义二叉树
{
    ElemType data;
    struct node *lchild;
    struct node *rchild;
}BTNode;
void CreateBTNode(BTNode *&h,char *str)      //建造二叉树
{
    BTNode *zhan[MaxSize],*p=NULL;
    int top=-1,k,j=0;
    char c;
    c=str[j];
    while(c!='#')
    {
        switch(c)
        {
        case '(':top++;zhan[top]=p;k=1;break;
        case ')':top--;break;
        case ',':k=2;break;
        default:p=new BTNode;
            p->data=c;p->lchild=NULL;p->rchild=NULL;
            if(h==NULL)
                h=p;
            else
                switch(k)
                {
                case 1:zhan[top]->lchild=p;break;
                case 2:zhan[top]->rchild=p;break;
                }
        }
        j++;
        c=str[j];
    }
}
void display(BTNode *h)     //输出root的左右的孩子
{
    cout<<"左孩子结点值:"<<h->lchild->data<<endl;
    cout<<"右孩子结点值:"<<h->rchild->data<<endl;
}
int high(BTNode *h)       //求高度
{
    int i,lift,right;
    if(h==NULL)
        return 0;
    else
    {
        if(h->lchild!=NULL)
            i=1;
        else
            i=2;
        switch(i)
        {
        case 1:lift=high(h->lchild)+1;break;
        case 2:right=high(h->rchild)+1;break;
        }
        return (lift>right)? lift:right;
    }
}
void wide(BTNode *h)      //求宽度
{
    BTNode *std[MaxSize];
    int top=1,i=0,j,n,k=1,m,f=0,l=1,max;
    int a[MaxSize];
    std[top]=h;
    i++;
    a[f]=i;
    if(std[1]->lchild!=NULL)
            {
                i++;
                top++;
                std[top]=std[1]->lchild;
            }
            if(std[1]->rchild!=NULL)
            {
                i++;
                top;
                std[top]=std[1]->lchild;
            }
    while(l<=MaxSize)
    {
        i=0;
        m=i;
        n=top;
        for(j=k;j<=n;j++)
        {
            if(std[j]->lchild!=NULL)
            {
                i++;
                top++;
                std[top]=std[j]->lchild;
            }
            if(std[j]->rchild!=NULL)
            {
                i++;
                top;
                std[top]=std[j]->lchild;
            }
        }
        k=k+m;
        f++;
        a[f]=i;
        l++;
    }
    max=a[0];
    for(i=1;i<=f;i++)
        if(max<a[i])
            max=a[i];
    cout<<"宽度为:"<<max<<endl;
}
int main()
{
    BTNode *h;
    char str[MaxSize];
    int i=0;
    cin>>str[i];
    while(str[i]!='#')
    {
        i++;
        cin>>str[i];
    }
    CreateBTNode(h,str);
    display(h);
    wide(h);
}
输入是以括号表示法的二叉树    然后应该以#号结束
但是以#号结束时   程序就出错了   无法运行  
搜索更多相关主题的帖子: str void include 二叉树 
2010-11-27 11:27
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
二叉树有点陌生了,你把题的要求说下看看我能帮不能,或者到数据结构板块去问,C板块比较热闹,也可以去。

离恨恰如春草,更行更远还生。
2010-11-27 12:52
xanxus
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:60
注 册:2010-10-26
收藏
得分:0 
LZ给个例子,我们好根据你的例子分析

授人以鱼  不如授人以渔
2010-11-27 13:51
狂一户
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-11-5
收藏
得分:0 
回复 2楼 玩出来的代码
题目没什么要求,就是建立二叉树,输出H结点的左右孩子结点值,输出二叉树的深度,输出二叉树的宽度。
这是课本上的题目,是建立在课文的基础上的,是用括号表示法的二叉树进行输入和分析
我想可能是输入#号和上面的程序有冲突  但是看了半天,没发现为什么。
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-11-27 15:17
狂一户
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-11-5
收藏
得分:0 
回复 3楼 xanxus
题目没什么要求,就是建立二叉树,输出H结点的左右孩子结点值,输出二叉树的深度,输出二叉树的宽度。
这是课本上的题目,是建立在课文的基础上的,是用括号表示法的二叉树进行输入和分析
我想可能是输入#号和上面的程序有冲突  但是看了半天,没发现为什么。
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-11-27 15:17
xanxus
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:60
注 册:2010-10-26
收藏
得分:0 
我想知道是你是如何输入的,你那个括号表示法具体给个例子

授人以鱼  不如授人以渔
2010-11-27 16:53
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
A(B(C(D,E),F),G(H))#
建树的函数不错
2010-11-27 19:42
xanxus
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:60
注 册:2010-10-26
收藏
得分:0 
没有构造结点吧,我好象没看到

授人以鱼  不如授人以渔
2010-11-27 21:49
狂一户
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2010-11-5
收藏
得分:0 
回复 6楼 xanxus
老师,如楼下的版主举得例子
2010-11-27 22:18
无名可用
Rank: 4
等 级:业余侠客
帖 子:79
专家分:259
注 册:2010-7-27
收藏
得分:0 
程序代码:
#include<iostream>
using namespace std;
typedef char ElemType;
#define MaxSize 100
typedef struct node         //定义二叉树
{
    ElemType data;
    struct node *lchild;
    struct node *rchild;
}BTNode;
void CreateBTNode(BTNode *&h,char *str)      //建造二叉树
{
    BTNode *zhan[MaxSize],*p=NULL;
    int top=-1,k=0,j=0;
    char c;
    c=str[j];
    while(c!='#')
    {
        switch(c)
        {
        case '(':{top++;zhan[top]=p;k=1;}break;
        case ')':top--;break;
        case ',':k=2;break;
        default:
        {
            p=new BTNode;
            p->data=c;p->lchild=NULL;p->rchild=NULL;
            if(h==NULL)
                h=p;
            else
                switch(k)
                {
                case 1:zhan[top]->lchild=p;break;
                case 2:zhan[top]->rchild=p;break;
                }
        }//default
        }//switch
        j++;
        c=str[j];
    }
}
void display(BTNode *h)     //输出root的左右的孩子
{
    cout<<"h="<<h->data<<endl;
    cout<<"左孩子结点值:"<<h->lchild->data<<endl;
    cout<<"右孩子结点值:"<<h->rchild->data<<endl;
}
int main()
{
    BTNode *h=NULL;//要加上NULL,把NULL去掉你就明白了
   char str[MaxSize];
    int i=0;
    cin>>str[i];
    while(str[i]!='#')
    {
        i++;
        cin>>str[i];
    }
    CreateBTNode(h,str);
    display(h);
    wide(h);
    return 1;
}
至于求二叉树的宽度我们数据结构课没提到,不过我感觉层次遍历一下整个树就可以了。
你的程序中求宽度的函数有问题,而且楼主既然你用c++来编程,为什么还保留着C语言的习惯:把所有变量都定义在
函数头部,当变量一多,又没有注解,看的人有点晕。
2010-11-28 10:13
快速回复:求助啊!!!!请大家来帮忙看看。。。。
数据加载中...
 
   



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

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