//前序 递归
void preOrderRecursive(Tree * t)
{
if( !t )
return;
visist(t);
preOrderRecursive(t->left);
preOrderRecursive(t->right);
}
//中序递归
void inOrderRecursive(Tree * t)
{
if( !t )
return;
inOrderRecursive(t->left);
visist(t);
inOrderRecursive(t->right);
}
//后序递归
void postOrderRecursive(Tree * t)
{
if( !t )
return;
postOrderRecursive(t->left);
postOrderRecursive(t->right);
visist(t);
}
void preOrderNonRecursive(Tree * t)
{
if( !t )
return ;
stack<Tree*> s;
s.push(t);
while( !s.empty())
{
Tree* p = s.top();
s.pop();
visit(p);
if( !p->left)
s.push(p->left);
if( !p->right)
s.push(p->right);
}
}
//中序非递归遍历
void inOrderNonRecursive(Tree * t)
{
if( !t)
return;
stack<Tree*> s;
Tree *p = t;
while( !s.empty() || p)
{
if( p )
{
s.push( p);
p = p->left;
}
else
{
p = s.top();
s.pop();
visit(p);
p = p->right;
}
}
}
//后序非递归是最难的,这里使用两个栈,一个是遍历栈,一个是访问栈
void postOrderNonRecursive(Tree *t)
{
if(!t)
return;
stack<Tree*> s, v;
s.push(t);
while( !s.empty())
{
Tree *p = s.pop();
v.push(p);
if( !p->left)
s.push(p->left);
if( !p->right)
s.push(p->right);
}
while( !v.empty())
visit( v.pop());
}