if(InOrderT raverse(T - > left,visit))if(visit(T->data))
if(InOrderTraverse(T->right,visit))returnOK;returnERROR;
)elsereturnOK;
}//InOrderT raverse算法4-2二叉树的中序遍历递归算法
(3)后序遍历算法
StatusPostOrderTraverse(BiTreePtrT,Status(*visit)(ElemTypee)){
〃采用二叉链表存储结构,visit是对数据元素操作的应用函数〃该算法采用递归的方
式,对每个数据元素调用函数visit
if(T){if(PostOrderTraverse(T->left,visit))
if( PostOrderT raverse(T- > right,visit)) if(visit(T->data))returnOK;returnERROR;
)elsereturnOK;
}//PostOrderT raverse算法4-3二叉树的后序遍历递归算法
以上的三种算法均为递归算法,在运行过程中,函数需要使用系统设立的''递归 工作
栈〃存储调用函数和被调用函数之间的链接及信息的交换。下面我们以中序 算法为例,
结合图4.8(a)的二叉树,分析它的执行过程。
当开始调用中序遍历算法时(此次称为第0次递归调用),需要以指向根结点a 的指针Ta
作为实参,把它传递给形参T,递归栈中应包括形参T的值和返回地 址。现假定指向每个
结点的指针用该结点的值作为T的后缀,如指向结点d的指 针就用Td表示,并且假定进
行第0次递归调用后的返回地址为0,以及假设访 问函数为打印输出结点的值,那么函数
递归调用的过程中,递归工作栈的状态如图 4.9所不。
① StatusInOrderTraverse(BiTreePtrT,Status(*visit)(ElemTypee)){② if(T){
③ if(InOrderr raverse(T-> left, visit))(4) if(visit(T->data))
⑤if(InOrderT raverse(T- > right,visit))