可能編譯時會有些語法小錯誤(比如分號,->,等),很容易就自己糾正了哦,思路絕對是完全正確的,所以用的話就自己試著改改吧,直接復制粘貼,就正確,豈不是太沒寫代碼體驗了,自己改改才印象更加深刻的呢(▽)~~~~;
//遍歷線索二叉樹
#include<iostream>
using namespace std;
typedef struct BiThrNode{
char data;
struct BiThrNode *lchild,*rchild;
int LTag,RTag;
}BiThrNode,*BiThrTree;
BiThrNode *pre=new BiThrNode;
void CreateBiTree(BiThrTree &T){
char ch;
cin>>ch;
if(ch='#') T=NULL;
else{
T=new BiThrNode;
T->data=https://www.cnblogs.com/ygjzs/p/ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InTreading(BiThrTree p){
if(p){
InTreading(p->lchild);
if(!p->lchild){
p->LTag=1;
p->lchild=pre;
}else{
p->LTag=0;
}
if(!pre->rchild){
pre->RTag=1;
pre->rchild=p;
}else{
pre->RTag=0;
}
pre=p;
InTreading(p->rchild);
}
}
void InOrderTreading(BiThrTree &Thrt,BiThrTree T){
Thrt=new BiThrNode;
Thrt->LTag=0;
Thrt->RTag=1;
Thrt->rchild=Thrt;
if(!T){
Thrt->lchild=Thrt;
}else{
Thrt->lchild=T;
pre=Thrt;
InTreading(T);
pre->rchild=Thrt;
pre->RTag=1;
Thrt->rchild=pre;
}
}
//start
void InOrderTraverse_Thr(BiThrTree T){
BiThrTree p;
p=T->lchild;
while(p!=T){
while(p->LTag==0){
p=p->lchild;
}
cout<data;
while(p->RTag==1&&p->rchild!=T){
p=p->rchild;
cout<rchild;
}
}
void main(){
pre->RTag=1;
pre->rchild=NULL;
BiThrTree tree,Thrt;
cout<,"please input:\n";
CreateBiTree(tree);
InOrderTreading(Thrt,tree);
cout<<"result is:\n";
InOrderTraverse_Thr(Thrt);
cout<<endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/124287.html
標籤:其他
上一篇:構造哈夫曼樹
下一篇:根據赫夫曼樹求赫夫曼編碼
