#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define size 100
#define ERROR 0
#define OK 1
typedef struct BiThrNode{
char data;
struct BiThrNode *lchild,*rchild;
int LTag,RTag;
}BiThrNode,*BiThrTree;
BiThrNode *pre;//定义全局变量;
void CreateBiTree(BiThrTree &bt){
char ch;
cin >> ch;
if(ch=='#') bt=NULL;
else{
bt=new BiThrNode;
bt->data=ch;
CreateBiTree(bt->lchild);
CreateBiTree(bt->rchild);
}
}
void InThreading(BiThrTree bt){
if(bt){
InThreading(bt->lchild);
if(bt->lchild==NULL){
bt->LTag=1;
bt->lchild=pre;
}
else
bt->LTag=0;
if(pre->rchild==NULL){
pre->RTag=1;
pre->rchild=bt;
}
else
pre->RTag=0;
pre=bt;
InThreading(bt->rchild);
}
}
// 带头结点的中序线索化
void InOrderThreading (BiThrTree &Thrt,BiThrTree bt){
Thrt=new BiThrNode;
Thrt->LTag=0;
Thrt->RTag=1;
Thrt->rchild=Thrt;
if(bt==NULL) Thrt->lchild=Thrt;
else{
Thrt->lchild=bt; pre=Thrt;
InThreading(bt);
pre->rchild=Thrt;
pre->RTag=1;
Thrt->rchild=pre;
}
}
void InOrderTraverse_Thr(BiThrTree bt){
BiThrTree p;
p=bt->lchild;
while(p!=bt){
while(p->LTag==0)
p=p->lchild;
cout<<p->data;
while(p->RTag==1&&p->rchild!=bt){
p=p->rchild;
cout<<p->data;
}
p=p->rchild;
}
}
int main(){
BiThrTree bt,Thrt;
cout<<"请输入建立二叉链表的序列"<<endl;
CreateBiTree(bt);
InOrderThreading(Thrt,bt);
cout<<"中序遍历线索二叉树的结果"<<endl;
InOrderTraverse_Thr(Thrt);
cout<<endl;
}
二叉树的中序线索遍历
最新推荐文章于 2023-09-15 23:34:45 发布