中序遍歷的操作如下:
1)中序遍歷左子樹;
2)訪問根節點;
3)中序遍歷右子樹;
對應的遞歸算法如下:
void InOrder(Bitree T) {
if (T != NULL) {
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
對應的非遞歸算法如下:
void InOrder2(Bitree T) {
//借助棧實現
InitStack(S); Bitree p = T; //初始化棧,p是遍歷指針
while (p || !IsEmpty(S)) {
if (p) {
Push(S, p);
p = p->lchild; //中序遍歷左子樹
}
else {
Pop(S, p);
visit(p); //訪問根節點
p = p->rchild; //中序遍歷右子樹
}
}
}