error C2664: ✀Visit✀ : cannot convert parameter 1 from ✀char✀ to ✀struct BiTNode *✀ Conversion from

2025-03-01 18:36:38
推荐回答(1个)
回答1:

额,明显的问题,你的Visit()函数里的参数是BiTree类型的,你调用的时候类型是char类型的就这一点错了,我改过了,把T->data改为T就行了
#include
#include
#include
#define OK 1
#define FALSE 0
typedef int Status;
typedef char ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//建立二叉树
Status CreateBiTree(BiTree T)
{
printf("请输入结点以建立二叉树");
char ch;
ch=getchar();
scanf("%c",&ch);
if(ch==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;
}
//访问函数
Status Visit(BiTree T)
{
if(T)
{
printf("%c ",T->data);
return OK;
}
else
return FALSE;
}
//先序遍历
Status PreOrderTraverse(BiTree T)
{
if(T)
{
if(Visit(T))
{
if(PreOrderTraverse(T->lchild))
{
if(PreOrderTraverse(T->rchild))
{
return OK;
}
}
return FALSE;
}
return FALSE;
}
else
{
return OK;
}
}
//中序遍历
Status InOrderTraverse(BiTree T)
{
if(T)
{
if(InOrderTraverse(T->lchild))
{
if(Visit(T))
{
if(InOrderTraverse(T->rchild))
{
return OK;
}
}
return FALSE;
}
return FALSE;
}
else
{
return OK;
}
}
//后序遍历
Status PostOrderTraverse(BiTree &T)
{
if(T)
{
if(PostOrderTraverse(T->lchild))
{
if(PostOrderTraverse(T->rchild))
{
if(Visit(T))
{
return OK;
}
}
return FALSE;
}
return FALSE;
}
else
{
return OK;
}
}
void main()
{
int num;
int m=1;
BiTree T;
CreateBiTree(T);
Visit(T);
while(m)
{
printf("_____________________________\n");
printf("1.先序递归遍历\n");
printf("2.中序递归遍历\n");
printf("3.后序递归遍历\n");
printf("0.退出程序!\n");
printf("______________________________\n");
scanf("%d",&num);
switch(num)
{
case 1:
if(T)
{
printf("递归先序遍历二叉树:");
PreOrderTraverse(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
case 2:
if(T)
{
printf("递归中序遍历二叉树:");
InOrderTraverse(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
case 3:
if(T)
{
printf("递归后序遍历二叉树:");
PostOrderTraverse(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
default:m=0;printf("程序运行结束,按任意键退出!\n");
}
}
}