/* PostOrderTraverse()调用 */ void PostTraverse(SqBiTree T,int e) { if(T[2*e+1]!=Nil) /* 左子树不空 */ PostTraverse(T,2*e+1); if(T[2*e+2]!=Nil) /* 右子树不空 */ PostTraverse(T,2*e+2); visit(T[e]); }
void PostTraverse(SqBiTree T,int e) { // PostOrderTraverse()调用 if(T[2*e+1]!=Nil) // 左子树不空 PostTraverse(T,2*e+1); if(T[2*e+2]!=Nil) // 右子树不空 PostTraverse(T,2*e+2); VisitFunc(T[e]); }
void PostTraverse(BiTree T) { if(NULL!=T) { PostTraverse(T->lchild); PostTraverse(T->rchild); printf("%d ",T->data); } }
/* 操作结果: 后序遍历T。 */ Status PostOrderTraverse(SqBiTree T) { if(!BiTreeEmpty(T)) /* 树不空 */ PostTraverse(T,0); printf("\n"); return OK; }
void PostOrderTraverse(SqBiTree T,void(*Visit)(TElemType)) { // 初始条件:二叉树T存在,Visit是对结点操作的应用函数 // 操作结果:后序遍历T,对每个结点调用函数Visit一次且仅一次 VisitFunc=Visit; if(!BiTreeEmpty(T)) // 树不空 PostTraverse(T,0); cout<<endl; }