上篇博客中,我们讲了二叉树的结点定义及一些基本操作,现在我们来实现二叉树的非递归遍历操作。
二叉树的遍历有4种操作方法,如前序操作、中序操作、后序操作及层序操作,我们现在着重实现前序操作、中序操作、后序操作的非递归实现。
1.前序操作
void PrevOrderNonR()
{
stack<Node *> s;
Node *cur = _root;
while(cur || (!s.empty()))
{
while(cur)
{
s.push(cur);
cout<<cur->_data<<" ";
cur = cur->_left;
}
Node *top = s.top();
s.pop();
cur = top->_right;
}
cout<<endl;
}
2.中序操作
void InOrderNonR()
{
stack<Node *> s;
Node *cur = _root;
while(cur || (!s.empty()))
{
while(cur)
{
s.push(cur);
cur = cur->_left;
}
Node *top = s.top();
cout<<top->_data<<" ";
s.pop();
cur = top->_right;
}
cout<<endl;
}
3.后序操作
void PastOrderNonR()
{
stack<Node *> s;
Node *cur = _root;
Node *prev = NULL;
while(cur || (!s.empty()))
{
while(cur)
{
s.push(cur);
cur = cur->_left;
}
Node *top = s.top();
if((NULL == top->_right) || (top->_right == prev))
{
cout<<top->_data<<" ";
prev = top;
s.pop();
}
else
{
cur = top->_right;
}
}
cout<<endl;
}
前序操作、中序操作、后序操作的递归实现及层序操作在我的上一篇博客中已经有代码实现,若有不懂得,可以查看我的上篇博客,链接为http://blog.youkuaiyun.com/manongdeyipiant/article/details/70332636