深度优先的非递归遍历算法(中序遍历)(借助栈实现)
typedef struct BiTNode
{
DataType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Ninorder(BiTree T)
{
Sqstack *S;
BiTree p=T;
InitStack(S);
while(p!=NULL||!Empty(S))
{
if(p)
{
Push(S,p); //根节点入栈
p=p->lchild;
}
else
{
Pop(S,p);
printf("%c",p->data);
p=p->rchild;
}
}
}
————————————————————————————————————————
广度优先遍历的非递归遍历算法(层序遍历)(借助队列实现)
layer(BiTree T)
{
BiTree p;
BiTree Q[Maxsize]
SqQueue *Q;
InitQueue(Q);
if(T)
{ //初始化rear=front=0
Q->rear=(Q->rear+1)%Maxsize; //队尾指针指向1
Q->data[Q->rear]=T; //向队尾添加元素
while(Q->front!=Q->rear) //循环队列非空
{
Q->front=(Q->front+1)%Maxsize;
p=Q->data[Q->front];
printf("%c",p->data); //遍历队列
if(p->lchild) //左子树非空
{
Q->rear=(Q->rear+1)%Maxsize;//向后移动尾指针
Q->data[Q->rear]=T; //向队尾添加元素
}
if(p->rchild) //右子树非空
{
Q->rear=(Q->rear+1)%Maxsize;//向后移动尾指针
Q->data[Q->rear]=T; //向队尾添加右子节点
}
}
}
}