您的位置:首页 > 其它

~二叉树的非递归遍历操作~

2017-04-21 18:23 239 查看
        上篇博客中,我们讲了二叉树的结点定义及一些基本操作,现在我们来实现二叉树的非递归遍历操作。

        二叉树的遍历有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.csdn.net/manongdeyipiant/article/details/70332636
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息