代碼如下:
1 void postorder(BiTree T) 2 { 3 InitStack(S); //初始化棧
4 p=T; 5 r=null; //輔助指針,指向最近訪問過的結點
6 while(p||!IsEmpty(s)) 7 { 8 if(p) 9 { 10 push(S,p); 11 p=p->lchid; //走到最左邊
12 } 13 else //向右查找
14 { 15 GetTop(S,p); //獲取棧頂元素,不出棧
16 if(p->rchild!=null&&p->rchild!=r) //如果右孩子非空並且沒有訪問過
17 p=p->rchild; //轉向右孩子
18 else //否則彈出節點並訪問
19 { 20 pop(S,p); 21 visit(p->data); 22 r=p; //記錄最近訪問過的結點
23 p=null; //結點訪問完,重置p指針
24 } 25 } 26 } 27 }