:前順走査動作は以下の通りである
ルートノードへの1)アクセス;
2)プレオーダー左サブツリー;
3)プレオーダー右サブツリー。
次の再帰的なアルゴリズムに対応します:
void PreOrder(Bitree T) {
if (T != NULL) {
visit(T);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
次のように非再帰的なアルゴリズムに対応する次のとおりです。
void PreOrder2(Bitree T) {
//借助栈实现
InitStack(S); Bitree p = T; //初始化栈,p是遍历指针
while (p || !IsEmpty(S)) {
if (p) {
Push(S, p);
visit(p); //访问根节点
p = p->lchild; //遍历左子树
}
else {
Pop(S, p);
p = p->rchild; //遍历左子树
}
}
}