二叉链表线索化中序遍历

逍康 2016-11-12 09:11:49
#include<stdio.h>
#include<stdlib.h>
typedef struct BiThrNode
{
char data;
struct BiThrnode *lchild,*rchild;
int Ltag,Rtag;
}BiThrNode;
BiThrNode *pre;
void InitTree(BiThrNode **T);
void InThreading(BiThrNode **Thrt,BiThrNode *T); //
void CreateTree(BiThrNode **T);
void InorderThreading(BiThrNode *p);
void InorderTraverse(BiThrNode *T);
int main()
{
int i;
BiThrNode *T,*Thrt;
CreateTree(&T);
InorderThreading(T);
InorderTraverse(T);
}
//创建二叉树
void CreateTree(BiThrNode **T)
{
char c;
printf("请输入数据\n");
c=getchar();
if(c=='#') {*T=NULL;}
else
{
(*T)=(BiThrNode *)malloc(sizeof(BiThrNode));
(*T)->data=c;
(*T)->Ltag=0;
(*T)->Rtag=0;
CreateTree(&(*T)->lchild);
CreateTree(&(*T)->rchild);
}
}
//
void InorderThreading(BiThrNode *p);
{
BiThrNode *P=p;
if(P)
{
InThreading(P->lchild);
if(!P->lchild);
{
P->Ltag=1;
P->lchild=pre;
}
else P->Ltag=0;
if(!pre->rchild)
{
pre->Rtag=1;
pre->rchild=P;
}
else P->Rtag=0;
pre=P;
InThreading(P->rchild);
}
}
//
void InThreading(BiThrNode **Thrt,BiThrNode *T)
{
(*Thrt)=(BiThrNode *)malloc(sizeof(BiThrNode));
(*Thrt)->Ltag=0;
(*Thrt)->Rtag=1;
(*Thrt)->rchild=*Thrt;
if(!T) (*Thrt)->lchild=*Thrt;
else
{
(*Thrt)->lchild=T;
pre=(*Thrt);
InorderThreading(T);
pre->rchild=(*Thrt);
pre->Rtag=1;
(*Thrt)->rchild=pre;
}
}
//
void InorderTraverse(BiThrNode *Thrt)
{
BiThrNode *p;
p=Thrt->lchild;
while(p!=Thrt)
{
while(p->Ltag==0)
{
p=p->lchild;
printf("%c\n",p->data);
}
while(p->Rtag==1&&p->rchild!=Thrt)
{
p=p->rchild;
printf("%c\n",p->data);
}
p=p->rchild;
}
}
(这是一个.cpp文件)
出现错误
cannot convert 'BiThrnode**' to 'BiThrNode**' for argument '1' to 'void CreateTree(BiThrNode**)
cannot convert 'BiThrnode**' to 'BiThrNode**' for argument '1' to 'void CreateTree(BiThrNode**)'|
error: expected unqualified-id before '{' token|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
请各位大神分析如何修改
...全文
229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 2016-11-14
  • 打赏
  • 举报
回复
错误楼上都说清楚了.
参考:http://blog.csdn.net/aspnet_lyc/article/details/14126157
paschen 2016-11-12
  • 打赏
  • 举报
回复
if(!P->lchild); 这句后面也多了分号 另外InThreading函数需要两个参数,你调用的时候只给了一个参数
paschen 2016-11-12
  • 打赏
  • 举报
回复
struct BiThrnode *lchild,*rchild; 改成: struct BiThrNode *lchild,*rchild; void InorderThreading(BiThrNode *p); 后面多了一个分号
逍康 2016-11-12
  • 打赏
  • 举报
回复
亲 谢谢 谢谢 第三个问题呢?
ipqtjmqj 2016-11-12
  • 打赏
  • 举报
回复
typedef struct BiThrNode { char data; struct BiThrnode *lchild,*rchild; int Ltag,Rtag; }BiThrNode;

69,369

社区成员

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

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