using namespace std;
#define ElemType int
typedef struct ThreadNode {
ElemType data;
struct ThreadNode *left, *right;
int rtag, ltag;
}ThreadNode, *ThreadTree;
ThreadNode *pre = nullptr;
void visited(ThreadNode *q) {
if (q->left == nullptr) {
q->left = pre;
q->ltag = 1;
}
if (pre != nullptr && pre->right == nullptr) {
pre->right = q;
pre->rtag = 1;
}
pre = q;
}
void inOrder(ThreadTree L) {
if (L == nullptr)
return;
inOrder(L->left);
visited(L);
inOrder(L->right);
}
void preOrder(ThreadTree L) {
if (L == nullptr)
return;
visited(L);
if (L->ltag == 0)
preOrder(L->left);
preOrder(L->right);
}
void CreateTreeInorder(ThreadTree T) {
pre = nullptr;
if (T != nullptr) {
inOrder(T);
if (pre->right == nullptr)
pre->rtag = 1;
}
}
void CreateTreePreOrder(ThreadTree T) {
pre = nullptr;
if (T != nullptr) {
preOrder(T);
if (pre->right == nullptr)
pre->rtag = 1;
}
}