原题链接:数据结构-线索二叉树
#include <iostream>
using namespace std;
struct A
{
char data;
struct A *lchild;
struct A *rchild;
int ltag=0, rtag=0;
};
typedef A *PA;
void InThreading(PA &p, PA &pre);
void InOrderThreading(PA &Thr, PA &T);
void InOrderTranverse(PA &Thr);
void init(PA &T);
int main()
{
PA Thr,T;
init(T);
InOrderThreading(Thr,T);
InOrderTranverse(Thr);
cout<<endl;
system("pause");
return 0;
}
void init(PA &T)
{
char a;
cin.get(a);
if (a == ' ')
{
T = NULL;
}
else
{
T = new A;
T->data = a;
init(T->lchild);
init(T->rchild);
}
}
void InOrderThreading(PA &Thr, PA &T)
{
Thr = new A;
Thr->rchild = Thr;
PA pre;
Thr->ltag = 0;
if (!T)
Thr->lchild = Thr;
else
{
Thr->lchild = T;
pre = Thr;
InThreading(T, pre);
Thr->rchild = pre;
Thr->rtag = 1;
pre->rchild = Thr;
pre->rtag = 1;
}
}
void InThreading(PA &p, PA &pre)
{
if (p)
{
InThreading(p->lchild, pre);
if (!p->lchild)
{
p->lchild = pre;
p->ltag = 1;
}
if (!pre->rchild)
{
pre->rchild = p;
pre->rtag = 1;
}
pre = p;
InThreading(p->rchild, pre);
}
}
void InOrderTranverse(PA &Thr)
{
PA p = Thr->lchild;
while (p != Thr)
{
while (p->ltag == 0)
p = p->lchild;
cout << p->data << " ";
while (p->rtag == 1 && p->rchild != Thr)
{
p = p->rchild;
cout << p->data << " ";
}
p = p->rchild;
}
}
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复