一、邏輯
聲明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的右孩子
}
}
}
