1.先序遍历递归算法
void PreOrder(BiTree T)
{
if(T!=NULL)
{
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
2.先序遍历非递归算法
void PreOrder2(BiTree T)
{
InitStack(S);
BiTree p=T;
while(p||!IsEmpty(S))
{
if(p)
{
visit(p);
Push(S,p);
p=p->lchild;
}
else
{
Pop(S,p);
p=p->rchild;
}
}
}
3.中序遍历递归算法
void InOrder(BiTree T)
{
if(T!=NULL)
{
InOrder(T->lchild);
visit(T);
InOrder(t->rchild);
}
}
4.中序遍历非递归算法
void InOrder2(BiTree T)
{
InitStack(S);
BiTree p=T;
while(p||!IsEmpty(S))
{
if(p)
{
Push(S,p);
p=p->lchild;
}
else
{
Pop(S,p);
visit(p);
p=p->rchild;
}
}
}
5.后序遍历递归算法
void PostOrder(BiTree T)
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(t->rchild);
visit(T);
}
}
6.后序遍历非递归算法
void PostOrder2(BiTree T)
{
InitStack(S);
BiTree p=T,r=NULL;//r指向上次访问的结点
while(p||!IsEmpty(S))
{
if(p)
{
Push(S,p);
p=p->lchild;
}
else
{
GetTop(S,p);//读取栈顶结点,不是弹出
if(p->rchild&&p->rchild!=r)
{
p=p->rchild;
Push(S,p);
p=p->lchild;
}
else
{
Pop(S,p);
visit(p);
r=p;
p=NULL;
}
}
}
}
7.层次遍历
void LevelOrder(BiTree T)
{
InitQueue(Q);
BiTree p;
EnQueue(Q,T);
while(!IsEmpty(Q))
{
DeQueue(Q,p);
visit(p);
if(p->lchild1=NULL)
EnQueue(Q,p->lchild);
if(p->rchild1=NULL)
EnQueue(Q,p->rchild);
}
}