今天看了大佬的线索二叉树教程,自己动手写的时候遇到了无法运行的情况
有没有大佬能帮忙看看是怎么回事(ノД`)
孩子已经秃头好久了
非常感谢(´△`)
下面是实验代码
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTree{
char data;
struct BiTree *lchild,*rchild;
int ltag,rtag;
}BiThrTree;
BiThrTree *pre;
void visit(BiThrTree *p)
{
printf("%c",p->data);
}
void CreateTree(BiThrTree *&p)
{
char ch;
scanf("%c",&ch);
if( ch == ' ' )
p = NULL;
else
{
p=(BiThrTree * )malloc(sizeof(BiThrTree));
p->data=ch;
p->ltag=0;
p->rtag=0;
CreateTree(p->lchild);
CreateTree(p->rchild);
}
}
void Threading(BiThrTree *&p)
{
Threading(p->lchild);
if( p->lchild == NULL )
{
p->ltag = 1;
p->lchild = pre;
}
if( pre->rchild==NULL )
{
pre->rtag = 1;
pre->rchild = p;
}
pre = p;
Threading(p->rchild);
}
BiThrTree *InThreading(BiThrTree *p)
{
BiThrTree *root;
root=(BiThrTree * )malloc(sizeof(BiThrTree));
root->ltag=0;
root->rtag=1;
root->rchild=root;
if( p==NULL )
root->lchild = root;
else
{
root->lchild = p;
pre = root;
Threading(p);
pre->rchild = root;
pre->rtag = 1;
root->rchild = pre;
}
return root;
}
void disp(BiThrTree *p)
{
BiThrTree *root=p->lchild;
while(p != root)
{
while(p->ltag == 0)
{
p = p->lchild;
}
visit(p);
while(p->rtag == 1 && p->rchild != root)
{
p=p->rchild;
visit(p);
}
p=p->rchild;
}
}
int main()
{
BiThrTree *p;
BiThrTree *root;
root=InThreading(p);
disp(root);
return 0;
}
我是用dev c++运行的
首先p应该初始化为NULL,否则inThreading里判断会错误。其次你这个inThreading没有循环执行啊,p开始为NULL,inThreading会创建一个头节点后就结束了啊,不会产生任何子节点,else根本不会执行的。
main里你得循环执行inThreading来ch产生子节点
这个是报错的
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632