一、逻辑
声明BinTree对象为p,并判断传入的t是否为null,为null 直接返回,否则将t赋值给p
先将LS为执行链栈的指针,循环条件是当指针或栈至少有一个不为空的时候
如果p不为空,访问节点的数据,将当前指针压入栈中,将指针指向p的左孩子
否则取栈顶元素,出栈,指针指向右孩子
二、代码
void PreOrder(BinTree t)
{
BinTree p;
LkStk *LS; // LS 为指向链栈指针
if(t == NULL) return;
InitStack(LS);
p=t;
while(p!=NULL || !EmptyStack(LS)) // 循环条件是当栈(p)和指针(LS)至少有一个不为空
{
if(p!=NULL)
{
Visit(p->data); // 访问结点的数据
Push(LS,p); // 将当前指针压入栈中
p=p->lchild; // 将指针指向p的左孩子
}
else
{
p=Gettop(LS); // 取栈顶元素
Pop(LS); // 出栈
p=p->rchild; // 指针指向p的右孩子
}
}
}