非递归方式实现二叉树的中序遍历:迭代方式:
//非递归中序遍历
void NonReInOrder(BintreeNode* node)
{
BintreeNode*p=node;
stack<BintreeNode*>s;
s.push(p);
bool flag=0;
while(!s.empty())
{
p=s.top();
//flag标志位。如果flag为0则沿着树向下遍历,如果flag为1则沿着树向上遍历
if(flag==0)
{
if(p->left==NULL)
{
cout<<p->key<<" ";
s.pop();
if(p->right==NULL)
{
if(s.empty())
{
break;
}
p=s.top();
cout<<p->key<<" ";
s.pop();
flag=1;
}
else
{
s.push(p->right);
p=s.top();
flag=0;
}
}
else
{
s.push(p->left);
flag=0;
}
}
//沿着树向上遍历左孩子
if(flag==1)
{
if(p->right==NULL)
{
if(s.empty())
{
break;
}
flag=1;
p=s.top();
cout<<p->key<<" ";
s.pop();
}
s.push(p->right);
flag=0;
}
}
cout<<"this is the end!"<<endl;
}