最近在学 二叉树 自己写了一个中序线索化 二叉树 但生成线索二叉树的函数有问题 希望 有高手 能帮忙 点拨一下
#include"iostream.h"
struct Node{//二叉树结点
int data;
Node*left;
Node*right;
int ltag;//线索化标志
int rtag;//线索化标志
};
class binarytree{
protected:
Node*root;
void preonder(Node*T);//前序遍历
void inonder(Node*T);//中序遍历
void postonder(Node*T);
public:
binarytree(){root=NULL;}
void creattree(Node*&T);//创建数的函数
void show1();//前序遍历函数
void show2();
void show3();
Node*&getroot();//得到根结点的引用
void Inthreading(Node*&T,Node*&pre);//线索化二叉树
void INthreadingtree();// 主调函数 调用 前一个函数Inthreading
Node* find(Node*t,int x);//查找结点
Node*getRoot();
Node* FOUND(int e);//查找结点
Node* findprior(int e);//查找线索化地前驱
};
void binarytree::creattree(Node*&T){
int x;
cin>>x;
if(x==0) T=NULL;
else{
T=new Node;
T->data=x;
T->ltag=0;
T->rtag=0;
creattree(T->left);
creattree(T->right);
}
}
void binarytree::preonder(Node*T){
if(T){
cout<<T->data;
preonder(T->left);
preonder(T->right);
}
}
void binarytree::show1(){
preonder(root);
}
void binarytree::inonder(Node*T){
if(T==NULL) return;
inonder(T->left);
cout<<T->data<<' ';
inonder(T->right);
}
void binarytree::show2(){
inonder(root);
}
Node*& binarytree::getroot(){
return root;
}
void binarytree::Inthreading(Node*&T,Node*&pre){
if(T==NULL) return ;
Inthreading(T->left,pre);//pre 为标记 p遍历的前驱
if(!T->left){
T->left=pre;
T->ltag=1;
}
if(!pre->right&&pre){
pre->rtag=1;
pre->right=T;
}
pre=T;//修改pre 使他指向前一结点
Inthreading(T->right,pre);
}
void binarytree::INthreadingtree(){
// creattree(root);
Node*pre=NULL;
Inthreading(root,pre);
}
Node* binarytree::find(Node*t,int x){
Node* m;
if(t){
if(t->data==x) return t;
m=find(t->left,x);
if(m) return m;
m=find(t->right,x);
if(m) return m;
}
return NULL;
}
Node* binarytree::getRoot(){
return root;
}
void main(){
binarytree b;
b.creattree(b.getroot());//
b.INthreadingtree();//这个线索化函数导致 程序崩溃 导致其他功能无发实现
b.show2();
}