关于不兼容指针类型的初始化的问题,请大神们帮帮忙

kevin_wkd 2013-06-01 11:41:57
#include <stdio.h>
#include <stdlib.h>
#define MAXNODE 10
typedef char datatype;
typedef struct Binode
{
datatype data;
struct Bitnode *lchild,*rchild;
}Bitnode,*Bitree;
void CreateBinTree(Bitree *T);
void PreOrder(Bitree bt);
void InOrder(Bitree bt);
void PostOrder(Bitree bt);
void LevelOrder(Bitree bt);
int Allnode (Bitree root);
Bitree Search(Bitree bt,datatype x);
int n2(Bitree bt);
int Countleaf(Bitree bt);
int main()
{
Bitree bt,p;
int sel;
datatype x;
printf("Please input your choice: \n1---Create\n2---Preorder\n3---Inorder\n4---Postorder\n5---Levelorder\n6---Allnodenumber\n7---Sreach\n8---Degree 2 nodenumber\n9---Degree 0 number\n10---quit\n");
scanf("%d",&sel);
while(sel!=10)
{
if(sel==1)
{
CreateBinTree(&bt);
printf("Establish finish!\n");
}
if(sel==2)
{
printf("PreOrder is:");
PreOrder(bt);
printf("\n");
}
if(sel==3)
{
printf("InOrder is:");
InOrder(bt);
printf("\n");
}
if(sel==4)
{
printf("PostOrder is:");
PostOrder(bt);
printf("\n");
}
if(sel==5)
{
printf("LevelOrder is:");
LevelOrder(bt);
printf("\n");
}
if(sel==6)
{
printf("The number of all nodes:");
printf("%d",Allnode(bt));
printf("\n");
}
if(sel==7)
{
printf("Please input the data you want to find:");
scanf("\n%c",&x);
p=Search(bt,x);
printf("%c",p->data);
printf("\n");
}
if(sel==8)
{
printf("Degree 2 node number are:");
printf("%d",n2(bt));
printf("\n");
}
if(sel==9)
{
printf("The number of leaf is:");
printf("%d",Countleaf(bt));
printf("\n");
}
printf("\nPlease input your choice: \n1---Create\n2---Preorder\n3---Inorder\n4---Postorder\n5---Levelorder\n6---Allnodenumber\n7---Sreach\n8---Degree 2 nodenumber\n9---Degree 0 number\n10---quit\n");
scanf("%d",&sel);
}
return 0;
}

void CreateBinTree(Bitree *T)
{
char ch;
getchar();
scanf("%c",&ch);
if(ch=='0')
{
*T=NULL;
}
else
{
*T=(Bitnode *)malloc(sizeof(Bitnode));
(*T)->data=ch;
CreateBinTree(&((*T)->lchild));
CreateBinTree(&((*T)->rchild));
}
}
void PreOrder(Bitree bt)
{
if(bt==NULL)
{
return;
}
else
{
printf("%3c",bt->data);
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void InOrder(Bitree bt)
{
if(bt==NULL)
{
return;
}
else
{
InOrder(bt->lchild);
printf("%3c",bt->data);
InOrder(bt->rchild);
}
}
void PostOrder(Bitree bt)
{
if(bt==NULL)
{
return;
}
else
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
printf("%3c",bt->data);
}
}
void LevelOrder(Bitree bt)
{
Bitree queue[MAXNODE];
int front,rear;
if(bt==NULL)
{
return;
}
front=-1;
rear=0;
queue[rear]=bt;
while(front!=rear)
{
front++;
printf("%3c",queue[front]->data);
if(queue[front]->lchild!=NULL)
{
rear++;
queue[rear]=queue[front]->lchild;
}
if(queue[front]->rchild!=NULL)
{
rear++;
queue[rear]=queue[front]->rchild;
}
}
}
int Allnode (Bitree root)
{
if(!root)
{
return 0;
}
else
{
return (1+Allnode(root->lchild)+Allnode(root->rchild));
}
}
Bitree Search(Bitree bt,datatype x)
{
Bitree p;
if(bt)
{
if(bt->data==x)
{
return bt;
}
else if(bt->lchild!=NULL)
{
p=Search(bt->lchild,x);
if(p)
{
return p;
}
}
else if(bt->rchild!=NULL)
{
p=Search(bt->rchild,x);
if(p)
{
return p;
}
}
}
return NULL;
}
int n2(Bitree bt)
{
if(bt==NULL)
{
return 0;
}
if((bt->lchild==NULL)&&(bt->rchild==NULL))
{
return 0;
}
if((bt->lchild!=NULL)&&(bt->rchild==NULL))
{
return n2(bt->lchild);
}
if((bt->lchild==NULL)&&(bt->rchild!=NULL))
{
return n2(bt->rchild);
}
if((bt->lchild!=NULL)&&(bt->rchild!=NULL))
{
return n2(bt->lchild)+n2(bt->rchild)+1;
}
}
int Countleaf(Bitree bt)
{
if(bt==NULL)
{
return 0;
}
if((bt->lchild==NULL)&&(bt->rchild==NULL))
{
return 1;
}
else
{
return(Countleaf(bt->lchild)+Countleaf(bt->rchild));
}
}


在第一个子函数创立二叉树的时候,Code blocks有warning:G:\Bintree\main.c|102|warning: passing argument 1 of 'CreateBinTree' from incompatible pointer type|
究竟该怎么办,程序长了点,但是还是希望各位高手帮帮忙
...全文
139 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bewinged 2013-06-03
  • 打赏
  • 举报
回复
引用 2 楼 hugett 的回复:

typedef struct Binode
{
	datatype data;
	struct Binode *lchild,*rchild;//这里改为Binode*。。。
}Bitnode,*Bitree;
你可真细心。
hugett 2013-06-03
  • 打赏
  • 举报
回复

typedef struct Binode
{
	datatype data;
	struct Binode *lchild,*rchild;//这里改为Binode*。。。
}Bitnode,*Bitree;
赵4老师 2013-06-03
  • 打赏
  • 举报
回复
引用 3 楼 zengzhihao 的回复:
[quote=引用 2 楼 hugett 的回复:]

typedef struct Binode
{
	datatype data;
	struct Binode *lchild,*rchild;//这里改为Binode*。。。
}Bitnode,*Bitree;
你可真细心。[/quote] 细心是一个合格码痴的基本功! 关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
kevin_wkd 2013-06-03
  • 打赏
  • 举报
回复
引用 2 楼 hugett 的回复:

typedef struct Binode
{
	datatype data;
	struct Binode *lchild,*rchild;//这里改为Binode*。。。
}Bitnode,*Bitree;
星号的位置不同对这个定义有什么区别吗?
kevin_wkd 2013-06-01
  • 打赏
  • 举报
回复
CreateBinTree(&((*T)->lchild)); 就是提示这一行有问题,而且在其他函数也有相同的问题

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧