鲤Bubble。o O 2023-05-16 19:58 采纳率: 60%
浏览 38
已结题

关于我的c语言卡在了两个大括号问题上运行不了这件事

C语言出错的问题,有没人会改一下的C语言出错的问题,有没人会改一下的

img

img

#include<stdlib.h>
#include"iostream"
#define Maxsize 100
using namespace std;
typedef char ElemType;

typedef struct node
{
    ElemType data;
    struct node *lchild;
    struct node *rchild;
}BTNode;



void CreateBTree(BTNode * &b, char *str)
{
    BTNode *St[Maxsize],*p;
    int top=-1,k,j=0;
    char ch;
    b=NULL;
    ch=str[j];
    while(ch!='\0')
{
    switch (ch)
    {
        case '(':top++;St[top]=p;k=1;break;
        case')':top--;               break;
        case',':k=2;                 break;
        default:
            p=(BTNode*)malloc(sizeof(BTNode));
            p->data=ch;
            p->lchild=p->rchild=NULL;
            if(b==NULL)
              b=p;
              else
              {
                  switch(k)
                  {
                      case 1:St[top]->lchild-p;break;
                    case 2:St[top]->rchild=p;break; 
                  }
              }
              j++;
              ch=str[j];
    }
    
}

void DestroyBtree(BTNode *&b) 
{
    if (b!=NULL)
    {
        DestroyBtree(b->lchild);
        DestroyBtree b->rchild);
        free(b);
    }
}
 
BTNode *FindNode(BTNode *b,ElemType x)
{
    BTNode *p;
    if(b-=NULL)
    {
        return NULL;
    }
    else if(b->data==x)
    {
        return b;
    }
    else
    {
        p=FindNode(b->rchild,x);
        if(p!-NULL)
        {
            return p;
        }
        else
        {
            return FindNode(b->rchild, x);
        }
    }
}

BTNode *LchildNode(BTNode *p)
{
    return p->lchild;
}
BTNode  RchildNode(BTNode *p)
{
    return p->rchild;
}

int BTHeight(BTNode *b)
{
    int lchildh,rchildh;
    if (b--NULL) return 0;
    else
    {
        lchildh=BTHeight(b->lchild);
        rchildh=BTHeight(b->rchild);
        return (lchildh>rchildh)? (lchildh+1):(rchildh+1);
    }
}

void DispBTree(BTNode *b)
{
    if (b!=NULL)
    {
        cout<<b->data;
        if(b->lchild!=NULL || b->rchild!-NULL)
        {
            cout<<"(";
            DispBTree(b->lchild);
            if(b->rchild!- NULL) cout<<",";
            DispBTree(b->rchild)
            cout<<")";
        }
    }
}



  • 写回答

2条回答 默认 最新

  • Huazie 优质创作者: 编程框架技术领域 2023-05-16 20:14
    关注

    完整代码发出来,缩进弄一下,检查 花括号是否匹配

    按这个试试看

    #include<stdlib.h>
    #include"iostream"
    #define Maxsize 100
    using namespace std;
    typedef char ElemType;
     
    typedef struct node
    {
        ElemType data;
        struct node *lchild;
        struct node *rchild;
    }BTNode;
     
     
     
    void CreateBTree(BTNode * b, char *str) // 修改
    {
        BTNode *St[Maxsize],*p;
        int top=-1,k,j=0;
        char ch;
        b=NULL;
        ch=str[j];
        while(ch!='\0')
        {
            switch (ch)
            {
                case '(':top++;St[top]=p;k=1;break;
                case')':top--;               break;
                case',':k=2;                 break;
                default:
                    p=(BTNode*)malloc(sizeof(BTNode));
                    p->data=ch;
                    p->lchild=p->rchild=NULL;
                    if(b==NULL)
                      b=p;
                      else
                      {
                          switch(k)
                          {
                              case 1:St[top]->lchild=p;break;
                            case 2:St[top]->rchild=p;break; 
                          }
                      }
                      j++;
                      ch=str[j];
            }
            
        }
    }//修改
    void DestroyBtree(BTNode *b) 
    {
        if (b!=NULL)
        {
            DestroyBtree(b->lchild);
            DestroyBtree(b->rchild); //修改
            free(b);
        }
    }
     
    BTNode *FindNode(BTNode *b,ElemType x)
    {
        BTNode *p;
        if(b-=NULL)
        {
            return NULL;
        }
        else if(b->data==x)
        {
            return b;
        }
        else
        {
            p=FindNode(b->rchild,x);
            if(p!=NULL)
            {
                return p;
            }
            else
            {
                return FindNode(b->rchild, x);
            }
        }
    }
     
    BTNode *LchildNode(BTNode *p)
    {
        return p->lchild;
    }
    BTNode *  RchildNode(BTNode *p)
    {
        return p->rchild;
    }
     
    int BTHeight(BTNode *b)
    {
        int lchildh,rchildh;
        if (b==NULL) return 0;
        else
        {
            lchildh=BTHeight(b->lchild);
            rchildh=BTHeight(b->rchild);
            return (lchildh>rchildh)? (lchildh+1):(rchildh+1);
        }
    }
     
    void DispBTree(BTNode *b)
    {
        if (b!=NULL)
        {
            cout<<b->data;
            if(b->lchild!=NULL || b->rchild!=NULL) // 修改
            {
                cout<<"(";
                DispBTree(b->lchild);
                if(b->rchild!= NULL) cout<<",";
                DispBTree(b->rchild);
                cout<<")";
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 修改了问题 5月16日
  • 创建了问题 5月16日