二叉树的遍历非递归算法
来源:互联网 发布:青岛知行国际留学 编辑:程序博客网 时间:2024/05/16 00:36
1、先序遍历的非递归实现
Staus PreOrderTraverse(BiTree T, (* Visit)(TElemType e))
{
InitStack(S);
p = T;
while(p || !StackEmpty( S ) )
{
/* if(p)
{
if ( !Visist(p->data) )
return ERROR;
Push(S, p); //只要存储根节点就行
p = p->lchild;
}
else //当左子树访问完了,退到子树根,开始访问右子树
{
Pop(S, p);
p = p->rchild;
}
*/
while( p != NULL)
{
Push(S, p);
visit(p->data);
p = p->lchild;
}
Pop(S, p);
p = p->rchild;
}
}
2、中序遍历的非递归实现
Status InOrderTraverse(BiTree T, (* Visit)(TElemType e)
{
InitStack(S); p = T;
while( p || !StackEmpty( S )
{
while(p)
{
Push(S, p);
p = p->lchild;
}
Pop(S, p);
if ( !Visit( p->data) )
return ERROR;
p = p->rchild;
}
return OK;
}
3、后序遍历的非递归实现
Status PostOrderTraverse(BiTree T, Status (* Vistit)*(TElemType e)
{
InitStack(S); p = T;
while (p || !StackEmpty( S ))
{
while (p) ////沿着左孩子方向走到最左下
{
Push(S, p);
p = p->child;
}
// Pop(S, p);
GetTop(S, p);
if (p->rchild == NULL || p->rchild == pre) //如果p没有右孩子或者其右孩子刚刚被访问过
{
if ( !Visit(p->data) )
return ERROR;
pre = p;
Pop(S, p);
p = NULL; //这时,不用对p的左子树再进行遍历了。
}
else
{
p = p->rchild;
}
}
return OK;
}
- 二叉树遍历的非递归算法
- 遍历二叉树的非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 遍历二叉树的非递归算法
- 二叉树的遍历非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树遍历的非递归算法
- 二叉树的非递归遍历算法
- 二叉树遍历的非递归算法
- 遍历二叉树的递归算法与非递归算法
- 二叉树的递归和非递归的遍历算法
- 遍历二叉树的递归和非递归算法
- 二叉树遍历的递归与非递归算法
- 组播MAC地址
- java窗口实验 (1)
- 关于SIGPIPE导致的程序退出
- C++继承标号:public继承、protected继承、private继承
- CMYK, RGB颜色值对照表
- 二叉树的遍历非递归算法
- Windows系统编程(三):线程
- SAP FI 配置步骤
- 段和页区别
- dwr的使用和ajax的标签使用
- NO.1 操作符重载实现
- 两道腾讯面试题
- 破解图片防盗链的代码(asp/php)测试通过
- uva 10160服务站