C语言线索二叉树遇到了一些困难

今天看了大佬的线索二叉树教程,自己动手写的时候遇到了无法运行的情况

有没有大佬能帮忙看看是怎么回事(ノД`)

孩子已经秃头好久了

非常感谢(´△`)

下面是实验代码

#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