#include<iostream>
using namespace std;
typedef char elemType;
struct BTNode
{
elemType data;
BTNode *lChild, *rChild;
int lFlag, rFlag;
};
typedef BTNode *BTree;
void preCreateBTree(BTree &bt);
void inOrderCueBTree(const BTree &bt, BTree &pre);
void inOrderBTree(const BTree &bt);
void visit(BTNode *node);
int main()
{
BTree bt;
preCreateBTree(bt);
BTNode *pre = NULL;
inOrderCueBTree(bt, pre);
pre -> rFlag = 1;
inOrderBTree(bt);
cout << endl;
return 0;
}
void preCreateBTree(BTree &bt)
{
elemType elem;
cin >> elem;
if (elem == '#')
{
bt = NULL;
}
else
{
bt = new BTNode;
bt -> data = elem;
preCreateBTree(bt -> lChild);
preCreateBTree(bt -> rChild);
}
}
void inOrderCueBTree(const BTree &bt, BTree &pre)
{
if (bt)
{
inOrderCueBTree(bt -> lChild, pre);
if (bt -> lChild == NULL)
{
bt -> lFlag = 1;
bt -> lChild = pre;
}
else
bt -> lFlag = 0;
if (pre)
{
if (pre -> rChild == NULL)
{
pre -> rFlag = 1;
pre -> rChild = bt;
}
else
pre -> rFlag = 0;
}
pre = bt;
inOrderCueBTree(bt -> rChild, pre);
}
}
void inOrderBTree(const BTree &bt)
{
BTNode *node = bt;
while (node)
{
while (node -> lFlag == 0)
{
node = node -> lChild;
}
visit(node);
while (node -> rChild && node -> rFlag == 1)
{
node = node -> rChild;
visit(node);
}
node = node -> rChild;
}
}
void visit(BTNode *node)
{
cout << node -> data;
}
#include<iostream>
using namespace std;
typedef char elemType;
struct BTNode
{
elemType data;
BTNode *lChild, *rChild;
int lFlag, rFlag;
};
typedef BTNode *BTree;
void preCreateBTree(BTree &bt);
void createHeadForInOrderCueBtree(BTree &head,const BTree &bt);
void inOrderCueBTree(const BTree &bt, BTree &pre);
void inOrderBTree(const BTree &bt);
void visit(BTNode *node);
int main()
{
BTree bt, head;
preCreateBTree(bt);
createHeadForInOrderCueBtree(head, bt);
inOrderBTree(head);
cout << endl;
return 0;
}
void preCreateBTree(BTree &bt)
{
elemType elem;
cin >> elem;
if (elem == '#')
{
bt = NULL;
}
else
{
bt = new BTNode;
bt -> data = elem;
preCreateBTree(bt -> lChild);
preCreateBTree(bt -> rChild);
}
}
void createHeadForInOrderCueBtree(BTree &head,const BTree &bt)
{
head = new BTNode;
head -> lFlag = head -> rFlag = 0;
head -> rChild = head;
if (bt -> lChild == NULL)
{
head -> lChild = head;
}
else
{
head -> lChild = bt;
BTNode * pre = head;
inOrderCueBTree(bt, pre);
pre -> rFlag = 1;
pre -> rChild = head;
head -> rFlag = 1;
head -> rChild = pre;
}
}
void inOrderCueBTree(const BTree &bt, BTree &pre)
{
if (bt)
{
inOrderCueBTree(bt -> lChild, pre);
if (bt -> lChild == NULL)
{
bt -> lFlag = 1;
bt -> lChild = pre;
}
else
bt -> lFlag = 0;
if (pre)
{
if (pre -> rChild == NULL)
{
pre -> rFlag = 1;
pre -> rChild = bt;
}
else
pre -> rFlag = 0;
}
pre = bt;
inOrderCueBTree(bt -> rChild, pre);
}
}
void inOrderBTree(const BTree &head)
{
BTNode *node = head -> lChild;
while (node != head)
{
while (node -> lFlag == 0)
{
node = node -> lChild;
}
visit(node);
while (node -> rChild != head && node -> rFlag == 1)
{
node = node -> rChild;
visit(node);
}
node = node -> rChild;
}
}
void visit(BTNode *node)
{
cout << node -> data;
}