先序遍历:
一、递归算法
访问根节点;
先序遍历左子树;
先序遍历右子树;
void PreOrder(BiTree T){
if(T!=NULL){
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
二、非递归算法
先将根结点进栈,在栈不空时循环:出栈p,访问*p结点,若其右孩子结点存在则将右孩子结点进栈,若其左孩子结点不空再将其左孩子结点进栈。
void PreOrder(BTNode *b)
{
BTNode *St[MaxSize],*p;
int top=-1;
if(b!=NULL)
{
top++;
St[top]=b;
while(top>-1)
{
//栈不为空
p=St[top];
top--;
printf("%c",p->data);
if(p->rchild!=NULL)
{
top++;
St[top]=p->rchild;
}
if(p->lchild!=NULL)
{
top++;
St[top]=p->lchild;
}
}
printf("\n");
}
}