求大佬帮忙看看这段二叉树基本功能实现有哪里出错了...VS上编译时没有错误但是就是无法输出

论坛 期权论坛 期权     
无敌教士   2018-4-26 14:07   12861   1
初学数据结构的树,编了很久但依然是显示这两个错误 不知道原因,求大佬赐教...
C2601 “main”: 本地函数定义是非法的
错误 C1075 “{”: 未找到匹配令牌
程序代码如下:#include  
#include   
#define MaxSize 50
typedef   int...初学数据结构的树,编了很久但依然是显示这两个错误 不知道原因,求大佬赐教...
C2601 “main”: 本地函数定义是非法的
错误 C1075 “{”: 未找到匹配令牌
程序代码如下:#include
#include
#define MaxSize 50
typedef   int ElemType;
typedef struct node
{
ElemType data;
struct node *lchild, *rchild;
}  BTNode;
void CreateBTNode(BTNode*&b,char*str)
{
BTNode *St[MaxSize], *p;
int top = -1,  k , j = 0;
char ch;
b = NULL;  //建立的二叉链初始时为空
ch = str[j];
while (ch != '\0')   //str未扫描完时循环
{
  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)     //p为二叉树的根结点
    b = p;
   else       //已建立二叉树根结点
   {
    switch (k)
    {
    case 1:  St[top]->lchild = p;  break;
    case 2:  St[top]->rchild = p;  break;
    }
   }
  }
  j++;  ch = str[j];  //继续扫描str
}
}
BTNode *FindNode(BTNode *b,ElemType x)
{
BTNode *p;
if (b == NULL) return NULL;
else if (b->data == x) return b;
else
{
  p = FindNode(b->lchild,x);
  if (p != NULL) return p;
  else return FindNode(b->rchild,x);
}
}
void   DestroyBT(BTNode *&b)
{
if (b == NULL) return;
else
{
  DestroyBT(b->lchild);
  DestroyBT(b->rchild);
  free(b);      //剩下一个结点*b,直接释放
}
}

int BTNodeDepth(BTNode *b)
{
int lchilddep, rchilddep;
if (b == NULL) return(0);  //空树的高度为0
else
{
  lchilddep = BTNodeDepth(b->lchild);
  //求左子树的高度为lchilddep
  rchilddep = BTNodeDepth(b->rchild);
  //求右子树的高度为rchilddep
  return(lchilddep > rchilddep) ? (lchilddep + 1) : (rchilddep + 1);
}
}
int  DispBTNode(BTNode *b)
{
if (b != NULL)
{
  printf("%c",b->data);
  if (b->lchild != NULL || b->rchild != NULL)
  {
   printf("(");
   DispBTNode(b->lchild);
   if (b->rchild != NULL) printf(",");
   DispBTNode(b->rchild);
   printf(")");
  }
}
}
int main()
{
BTNode *b = NULL;
char*str=NULL;
int deepth, num = 0;
int x;
printf("请输入生成树,#结束\n");
CreateBTNode(b, str);
printf("以括号表示法输出的二叉树为:%d\n", DispBTNode(b));
printf("树的高度为:%d/n", BTNodeDepth(b));
printf("请输入x作为查找结点:");
scanf("%d", &x);
printf("阈值为x的结点为:%d/n", FindNode(b, x));
DestroyBT(b);
return 0;
}
在此谢谢了orz展开
分享到 :
0 人收藏

1 个回复

倒序浏览
2#
905920365  3级会员 | 2018-4-30 01:48:27 发帖IP地址来自
这是C++吧,编译了没有你说的问题。
case ',': k = 2; break; //后面为右孩子结点
只是这句的','要改成英文状态的','
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP