stack<TreeNode*> nodes;
stack<bool> states;
LEFT: if(root)
{
// pre order
nodes.push(root);
states.push(true);
root=root->left;
goto LEFT;
}
else
{
PEEK: if( nodes.empty() ) return;
root=nodes.top();
bool state=states.top();
if (state)
{
// in order
states.top()=false;
root=root->right;
goto LEFT;
}
else
{
// post order
nodes.pop();
states.pop();
goto PEEK;
}
}
void Traversal(TreeNode*root)
{
if(root)
{
// pre order
Traversal(root->left);
// in order
Traversal(root->right);
// post order
}
}