# include "iostream"
using namespace std;
typedef struct node{
int data;
struct node*lchild;
struct node *rchild;
int rtage;
int ltage;
}node,*linklist;
linklist pre=NULL;
= 进行结构体的构造和全局变量变量的构造。
void zhongxu(linklist tt){
if(tt!=NULL){
zhongxu(tt->lchild);
cout<<" "<<tt->data;
zhongxu(tt->rchild);
}
}
=进行中序遍历
void visit(linklist tt){
if(tt->lchild==0){
tt->lchild=pre;
tt->ltage=1;
}
cout<<" "<<tt->data;
if(pre!=NULL&&pre->rchild==NULL){
pre->rchild=tt;
pre->rtage=1;
}
pre=tt;
}
void ListNode(linklist tt){
if(tt!=NULL){
ListNode(tt->lchild);
visit(tt);
ListNode(tt->rchild);
if(pre->rchild==NULL){
pre->rchild=NULL;
pre->rtage=1;
}
}
}
=进行中序线索化。
linklist FirstNode(linklist tt){
while(tt->ltage==0){
tt=tt->lchild;
}
return tt;
}
linklist KsNode(linklist tt){
if(tt->rtage==0){
return FirstNode(tt->rchild);
}
else{
return tt->rchild;
}
}
void KmNode(linklist tt){
linklist qq=FirstNode(tt);
while(qq!=NULL){
cout<<" "<<qq->data;
qq=KsNode(qq);
}
}
=线索化的遍历
# include "iostream"
using namespace std;
typedef struct node{
int data;
struct node*lchild;
struct node *rchild;
int rtage;
int ltage;
}node,*linklist;
linklist pre=NULL;
void Node(linklist tt);
void zhongxu(linklist tt){
if(tt!=NULL){
zhongxu(tt->lchild);
cout<<" "<<tt->data;
zhongxu(tt->rchild);
}
}
void visit(linklist tt){
if(tt->lchild==0){
tt->lchild=pre;
tt->ltage=1;
}
cout<<" "<<tt->data;
if(pre!=NULL&&pre->rchild==NULL){
pre->rchild=tt;
pre->rtage=1;
}
pre=tt;
}
void ListNode(linklist tt){
if(tt!=NULL){
ListNode(tt->lchild);
visit(tt);
ListNode(tt->rchild);
if(pre->rchild==NULL){
pre->rchild=NULL;
pre->rtage=1;
}
}
}
linklist FirstNode(linklist tt){
while(tt->ltage==0){
tt=tt->lchild;
}
return tt;
}
linklist KsNode(linklist tt){
if(tt->rtage==0){
return FirstNode(tt->rchild);
}
else{
return tt->rchild;
}
}
void KmNode(linklist tt){
linklist qq=FirstNode(tt);
while(qq!=NULL){
cout<<" "<<qq->data;
qq=KsNode(qq);
}
}
int main(){
linklist tt;
tt=(linklist)malloc(sizeof(node));
tt->data=1;
tt->rchild=tt->lchild=0;
tt->ltage=tt->rtage=0;
tt->lchild=(linklist)malloc(sizeof(node));
tt->lchild->data=2;
tt->lchild->lchild=tt->lchild->rchild=0;
tt->lchild->ltage=tt->lchild->rtage=0;
tt->rchild=(linklist)malloc(sizeof(node));
tt->rchild->data=3;
tt->rchild->rchild=tt->rchild->lchild=0;
tt->rchild->ltage=tt->rchild->rtage=0;
tt->lchild->lchild=(linklist)malloc(sizeof(node));
tt->lchild->lchild->data=4;
tt->lchild->lchild->lchild=tt->lchild->lchild->rchild=0;
tt->lchild->lchild->ltage=tt->lchild->lchild->rtage=0;
cout<<"普通的中序遍历"<<endl;
zhongxu(tt);
cout<<endl;
cout<<"线索华中序二叉树"<<endl;
ListNode(tt);
cout<<endl;
cout<<"线索化完成"<<endl;
cout<<"线索化得遍历"<<endl;
KmNode(tt);
return 0;
}
=完整的代码