qq_43847586
qq_43847586
2019-04-29 18:06

数据结构相关问题,一直没有找到错误。代码哪里出错了呢?

  • c语言

■问题描述:
建立一棵二叉树,编程实现从根结点到给定结点之间的路径。
■基本要求:
建立一棵以二叉链表存储的二叉树,以bt指向根节点、 p指向任一给定结点,
编程实现“以字符形式输出从根结点到给定结点之间的路径”。
■测试数据:
自行建立一棵以序列{A, B, C, D, E, F, G, H, I, J}中的英文字母为结点
的任意一棵二叉树。
■实现提示:
(1)以某种遍历方式建立二叉树的二叉链表存储结构;
(2)以非递归的后序方式遍历二叉树bt,并将访问过的结点依次存储到一个
顺序栈S中;
(3)当后序遍历访问到结点*p时,此时栈S中存放的所有结点均为给定结点*p
的祖先,而由这些祖先,便构成了一条从根结点到结点*p之间的路径。
错误提示 :[Error] expected ';', ',' or ')' before '&' token
代码如下:
#include
#include
#define MAXLEN 100

typedef struct BiTNode // 定义二叉树结点结构
{
char data; // 数据域
struct BiTNode LChild,*RChild; // 左右孩子指针域
}BiTNode,*BiTree;
int found=0;
BiTree p=NULL; //临时结点
//1.建立二叉树
void CreateBiTree(BiTree &bt)
{//按照先序序列建立二叉树的二叉链表
char ch;
printf("请输入结点:\n");
scanf("%c",&ch);
if(ch=='#')
bt=NULL;
else
{
bt=(BiTNode
)malloc(sizeof(BiTNode));//生成一个新结点
bt->data=ch; //生成根结点
CreateBiTree(bt->LChild); //生成左子树
CreateBiTree(bt->RChild); //生成子树
}
}
//2.后序遍历使结点入栈并求结点路径
void NodePath(BiTree bt,BiTNode*ch)
{
BiTNode*stack[MAXLEN]; //定义栈
int tag[MAXLEN]; //
int i,top=0,find=0;
BiTNode s=bt; //临时指针
do{
while(s!=NULL)
{ //扫描左子树
top++;
stack[top]=s;
tag[top]=0;
s=s->LChild;
}
if(top>0)
{ //栈非空
s=stack[top];
if(tag[top]==1)
{
if(s==ch)
{//遇到给定结点输出路径
for(i=1;i<=top;i++)
printf("-%c",stack[i]->data);
find=1;
}
else top--;
s=stack[top];
}
if(top>0&&!find)
{
if(tag[top]!=1)
{//扫描右子树
s=s->RChild;
tag[top]=1;
}
else s=NULL;
}
}
}
while(!find&&top!=0);
}
BiTNode *FindBT(BiTree bt,char x)
{
if((bt!=NULL)&&!found)
{
if(bt->data==x)
{
p=bt;
found=1;
}
else
{
FindBT(bt->LChild,x);//遍历查找左子树 遍历查找左子树
FindBT(bt->RChild,x);//遍历查找右子树 遍历查找右子树
}
}
return(p);
}
int main()
{//主程序界面函数
BiTree bt;
char s;
system("color 1f");
system("mode con:cols=78 lines=35");
printf("\t 求二叉树上给定结点的路径\n");
printf("\n
**********************************************\n");
printf("\t 1.建立二叉树\n");
printf("\t 2.求结点路径\n");
printf("\t 3.退出系统\n");
printf("\t 欢迎使用系统!\n");
printf("\n***********************************************\n");
printf("请选择您想要的服务:");
scanf("%s",&s);
switch(s)
{
case '1':
printf("请输入二叉树的结点序列 \n");
CreateBiTree(bt);
printf("二叉树建立成功\n");
break;
case '2':
printf("输入求路径的结点:");
s=getchar();
p=NULL;
found=0;
FindBT(bt,s);
if(p!=NULL) {
NodePath(bt,p);
printf("\n");
}
else printf("没有该结点! \n");
break;
case '3':exit(0);
default:printf("输入有误");break;
}
return 0;
}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

0条回答