6.7.2 森林的遍历 算法6.12 void InOrderTraverse_Tree(CSTree T,void(*visit)( CSTree )) { // 以孩子-兄弟链表作存储结构,中序遍历指针T所指森林 // (或后根遍历T所指树) if (T) { // T=NULL时,森林为空,不做任何操作 InOrderTraverse_Tree(T->firstchild, visit); // 中序遍历*T的子树森林 visit(T); // 通过函数指针 *visit 访问根结点 InOrderTraverse_Tree(T->nextsibling, visit);// 中序遍历其余树的森林 } // if } 也可以将算法6.12改写成如下形式: void InOrderTraverse_Tree(CSTree T,void(*visit)( CSTree )) { // 以孩子-兄弟链表作存储结构,中序遍历指针T所指森林 p=T; // 指针p指向第一棵树的根 while (p) { InOrderTraverse_Tree(p->firstchild, visit); // 中序遍历*p的子树森林 visit(p); // 通过函数指针*visit 访问根结点*p p=p->nextsibling; // 指针p移向下一棵树的根 } // while } |
如果将上页后根遍历的例树视作只含一棵树的森林,则上页后根遍历的动画即为按算法6.12进行遍历的过程。
|