#include <iostream>
#include <queue>
using namespace std;
typedef struct treeNode_t
{
int val;
struct treeNode_t *plchild;
struct treeNode_t *prchild;
treeNode_t(int v, struct treeNode_t *pl, struct treeNode_t *pr)
{
val = v;
plchild = pl;
prchild = pr;
}
}treeNode;
void morrisMid(treeNode *root)
{
if (NULL == root)
{
return;
}
treeNode *node = root;
while (node)
{
treeNode *mostRight = node->plchild;
if (mostRight)
{
while(mostRight->prchild && mostRight->prchild != node)
{
mostRight = mostRight->prchild;
}
if (nullptr == mostRight->prchild)
{
mostRight->prchild = node;
node = node->plchild;
}
else if (mostRight->prchild == node)
{
mostRight->prchild = nullptr;
cout << node->val << endl;
node = node->prchild;
}
}
else
{
cout << node->val << endl;
node = node->prchild;
}
}
}
int main() {
treeNode *node11 = new treeNode(11, nullptr, nullptr);
treeNode *node10 = new treeNode(10, nullptr, nullptr);
treeNode *node9 = new treeNode(9, nullptr, nullptr);
treeNode *node8 = new treeNode(8, nullptr, nullptr);
treeNode *node7 = new treeNode(7, nullptr, node11);
treeNode *node6 = new treeNode(6, node9, node10);
treeNode *node5 = new treeNode(5, node8, nullptr);
treeNode *node4 = new treeNode(4, nullptr, nullptr);
treeNode *node3 = new treeNode(3, node6, node7);
treeNode *node2 = new treeNode(2, node4, node5);
treeNode *node1 = new treeNode(1, node2, node3);
morrisMid(node1);
return 0;
}