6.7.3 森林的其它操作算法举例 一、求森林的深度 森林的深度 = Max{每一棵树的深度} 树的深度 = 其子树森林的深度+1 由此可见,求树的深度应该是对树进行后根遍历,即对森林进行中序遍历。 算法6.13 int Depth_Tree( CSTree T ) { // T 是以孩子-兄弟链表存储的森林的头指针,返回该森林的深度 if (!T) return 0; else { dep = 0; // 初始化森林的深度为0 p = T; // 指针 p 指向第一棵树的根 while (p) { d = Depth_Tree(p->firstchild); // 返回 *p 的子树森林的深度 if (d+1>dep) dep=d+1; // 求各棵树的深度的最大值 p=p->nextsibling; // 指针 p 移向下一棵树的根 } // while return dep; } // else } // Depth_Tree |
可以将树看成是"只含一棵树的森林",由此树和森林的操作是完全一致的,本小节讨论如何通过遍历实现森林的其它操作。 当以孩子-兄弟链表作树和森林的存储结构时,其遍历算法和二叉树的遍历算法类似,但在实现其它操作时一定要注意不要和二叉树混淆,在孩子-兄弟链表的结点中的两个指针指示的关系不同,左指针指向"孩子",而右指针指向"兄弟"。
|