正文

二叉树遍历非递归算法2006-10-29 21:46:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/byoneself/19799.html

分享到:

 PreOrder(BiTree T)  //先序非递归遍历二叉树  {           InitStack(S);  //创建工作栈           Push(S,T);           while(!StackEmpty(S))           {                     Pop(S,p);  //出栈                     Visit(p);   //访问                     if(p->rchild)                               Push(S,p->rchild);  //右子树入栈                     if(p->lchild)                          Push(S,p->lchild);   //左子树入栈           } }   InOrder(BiTree T)  //中序非递归遍历二叉树  {           InitStack(S);  //创建工作栈           Push(S,<T,0>);   //根入栈,且置0标志此时不能访问           while(!StackEmpty(S))           {                     Pop(S,<p,flag>);  //出栈                     if(flag==1)                                Visit(p);  //访问标志为1可以访问                      else                      {                            if(p->rchild)                                Push(S,<p->rchild,0>);   //右子树入栈且置访问标志0                             Push(S,<p,1>);   //根入栈且置访问标志1                              if(p->lchild)                                   Push(S,<p->lchild,0>);    //左子树入栈且置访问标志0                       }           } }   PostOrder(BiTree T)  //后序非递归遍历二叉树  {           InitStack(S);  //创建工作栈           Push(S,<T,0>);  //根入栈,且置i0标志此时不能访问           while(!StackEmpty(S))           {                 Pop(S,<p,flag>);  //出栈                  if(flag==1)                             Visit(p);  //访问标志为1可以访问                   else                   {                          Push(S,<p,1>);  //根入栈且置访问标志1                            if(p->rchild)                                   Push(S,<p->rchild,0>);  //右子树入栈且置访问标志0                             if(p->lchild)                                     Push(S,<p->lchild,0>);  //左子树入栈且置访问标志0                    }          } }   LayerOrder(BiTree T)  //层次遍历二叉树  {           InitQueue(Q);  //创建工作队列           EnQueue(Q,T);  //根入队           while(!QueueEmpty(Q))           {                     DeQueue(Q,p);  //出队                     Visit(p);  //访问                     if(p->lchild)                                EnQueue(Q,p->lchild);  //左子树入队                     if(p->rchild)                               EnQueue(Q,p->rchild);    //右子树入队           } }

阅读(4739) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册