码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的非递归遍历

时间:2014-09-15 19:36:09      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:c

先序遍历:

void preOrder(Node *p) //非递归
{
   if(!p) return;
   stack<Node*> s;
   Node *t;
   s.push(p);
   while(!s.empty())
   {
       t=s.top();
       printf("%d\n",t->data);
       s.pop();
       if(t->right) s.push(t->right);
       if(t->left) s.push(t->left);
    }
 }

中序遍历:

void inOrder(Node *p)
{
     if(!p)
         return;
     stack< pair<Node*,int> > s;
     Node *t;
     int unUsed;
     s.push(make_pair(p,1));
     while(!s.empty())
     {
         t=s.top().first;
         unUsed = s.top().second;
         s.pop();
         if(unUsed)
         {
               if(t->right)
                     s.push( make_pair(t->right,1) );
              s.push( make_pair(t,0) );
              if(t->left)
                     s.push( make_pair(t->left,1));
          }
          else printf("%d\n",t->data);
       }
}
后序遍历:

void postOrder(Node *p)
{
    if(!p) return;
    stack<pair<Node*,int> > s;
    Node *t;
    int unUsed;
    s.push(make_pair(p,1));
    while(!s.empty())
    {
        t=s.top().first;
        unUsed=s.top().second;
        s.pop();
        if(unUsed)
        {
            s.push(make_pair(t,0);
            if(t->right)
                s.push(make_pair(t->right,1));
            if(t->left)
                s.push(make_pair(t->left,1));
        }
        else printf("%d\n",t->data);


二叉树的非递归遍历

标签:c

原文地址:http://blog.csdn.net/yusiguyuan/article/details/39295831

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!